【问题标题】:Accessing to columns in a grouped list in pandas访问熊猫分组列表中的列
【发布时间】:2018-04-23 12:33:01
【问题描述】:

我在数据框中进行了groupby 操作,以按特定列的分类值进行分组。比如:

grouped = df.groupby(df["categories"])

如果我执行list(grouped),我得到的是一个数据框列表,每个类别一个。到目前为止,一切顺利。

但我想在列表的每个数据框中选择一个特定的列。想象一下我要访问的列名为vals。我想要类似的东西:

my_array = [grouped[i]["vals"] for i in grouped]

但是前面的命令不起作用,我尝试过的其他组合也不起作用。你有什么建议吗?谢谢。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    grouped return tuples - 组名和DataFrame,所以可能的解决方案是:

    #unpack tuples to i, df
    my_array = [df['vals'] for i, df in grouped]
    

    或者:

    #select second value of tuple - df
    my_array = [i[1]['vals'] for i in grouped]
    

    示例:

    df = pd.DataFrame({'D':[1,3,5,7],
                       'vals':[5,3,6,9],
                       'categories':list('aabb')})
    
    print (df)
       D categories  vals
    0  1          a     5
    1  3          a     3
    2  5          b     6
    3  7          b     9
    
    grouped = df.groupby(df["categories"])
    
    print (list(grouped))
    [('a',    D categories  vals
    0  1          a     5
    1  3          a     3), ('b',    D categories  vals
    2  5          b     6
    3  7          b     9)]
    
    my_array = [df['vals'] for i in grouped]
    print (my_array)
    [0    5
    1    3
    2    6
    3    9
    Name: vals, dtype: int64, 0    5
    1    3
    2    6
    3    9
    Name: vals, dtype: int64]
    

    【讨论】:

    • 谢谢,第一个选项似乎可以满足我的要求。
    • @David - 是的,这也是我更喜欢的方式,因为更好:)
    【解决方案2】:

    从您共享的代码来看,您似乎使用i 作为索引,这是不正确的。在您的情况下,for i in grouped,i 是列表中的实际对象。

    尝试其中一种

    my_array = [df.vals for i, df in grouped]

    或

    my_array = [grouped[1][i]["vals"] for i in range(len(grouped))]

    【讨论】:

    • 抱歉,您的方法不起作用。我认为他们失败是由于 groupby 列表的元组结构,如@jezrael cmets。
    • 我误解了grouped 只是数据框列表的列表。我进行了引用分组为原生 Pandas DataFrameGroupBy 对象的编辑。
    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2022-10-20
    • 2021-01-29
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多