【问题标题】:Python subset a data frame based on a variable namePython根据变量名子集数据框
【发布时间】:2017-04-22 13:48:21
【问题描述】:

您好,我有一个适用于我国市场所有股票数据的数据框,数据如下所示

Ticker  Date/Time   Open    High    Low Close   Volume
AAA     7/15/2010   19.581  20.347  18.429  18.698  174100.0
BBB     7/16/2010   19.002  19.002  17.855  17.855  109200.0
BBB     7/19/2010   19.002  19.002  17.777  17.777  104900.0
CCC     7/20/2010   18.429  18.429  17.084  17.354  328700.0
CCC     7/21/2010   17.354  17.431  16.895  17.316  75800.0

Ticker 列有股票名称,每一行是一个特定日期的数据。 我想编写一个循环代码,创建变量名称为股票名称的变量,变量是包含该股票数据的整个数据框的子集。

例如,

当我调用变量 BBB 时,我会得到这个数据框:

BBB

Ticker  Date/Time   Open    High    Low Close   Volume
BBB     7/16/2010   19.002  19.002  17.855  17.855  109200.0
BBB     7/19/2010   19.002  19.002  17.777  17.777  104900.0

能否请教我如何编写这段代码

【问题讨论】:

    标签: python-3.x pandas subset


    【解决方案1】:

    您可以创建dictionary of DataFrames,其中键是groupbydict comprehension 的名称:

    dfs = {idx:x for idx, x in df.groupby('Ticker')}
    
    print (dfs)
    {'BBB':   Ticker  Date/Time    Open    High     Low   Close    Volume
    1    BBB  7/16/2010  19.002  19.002  17.855  17.855  109200.0
    2    BBB  7/19/2010  19.002  19.002  17.777  17.777  104900.0, 
    'CCC':   Ticker  Date/Time    Open    High     Low   Close    Volume
    3    CCC  7/20/2010  18.429  18.429  17.084  17.354  328700.0
    4    CCC  7/21/2010  17.354  17.431  16.895  17.316   75800.0, 
    'AAA':   Ticker  Date/Time    Open    High     Low   Close    Volume
    0    AAA  7/15/2010  19.581  20.347  18.429  18.698  174100.0}
    
    print (dfs['BBB'])
      Ticker  Date/Time    Open    High     Low   Close    Volume
    1    BBB  7/16/2010  19.002  19.002  17.855  17.855  109200.0
    2    BBB  7/19/2010  19.002  19.002  17.777  17.777  104900.0
    

    另一种解决方案:

    dfs = {x:df[df['Ticker'] == x] for x in df['Ticker'].unique()}
    print (dfs['BBB'])
      Ticker  Date/Time    Open    High     Low   Close    Volume
    1    BBB  7/16/2010  19.002  19.002  17.855  17.855  109200.0
    2    BBB  7/19/2010  19.002  19.002  17.777  17.777  104900.0
    

    编辑:

    感谢DSM 的好建议:

    dfs = dict(list(df.groupby("Ticker")))
    

    【讨论】:

    • 那么我怎么能相应地分配变量名,我想要一个变量列表 [AAA,BBB,CCC] 其中: AAA = dfs['AAA'] BBB = dfs['BBB '] ....我目前必须手动完成,但数据框有数百个符号,你能建议
    • 嗯,我认为更好的许多变量是一个包含所有变量的字典,所以 ÀAA 使用 AAA = dfs['AAA'],而不是 BBB 使用 AAA = dfs['BBB']。你需要的不是python中的最佳实践。
    • 也许帮助检查this - 也可以使用globalslocals,但你确定吗?在我看来,如果只需要一个字典,则不需要太多变量。也许你能解释为什么你需要这个?谢谢。
    • 其实在尝试之后我认为你是对的,我不应该像这样创建太多变量。在这种情况下,dict 是一个非常有效的选择:D
    • dfs = dict(list(df.groupby("Ticker"))) 是 dictcomp 的替代品。
    猜你喜欢
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2018-11-08
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2020-07-05
    相关资源
    最近更新 更多