gpt4 book ai didi

python - 如何将多列分组以在 pandas DataFrame 中列出

转载 作者:行者123 更新时间:2023-12-02 00:09:02 25 4
gpt4 key购买 nike

我有一个 DataFrame df:

    A   B   C        date
O 4 5 5 2019-06-2
1 3 5 2 2019-06-2
2 3 2 1 2019-06-2
3 4 4 3 2019-06-3
4 5 4 6 2019-06-3
5 2 3 7 2019-06-3

现在我可以使用以下代码对一列进行分组:

df.groupby('date')['A'].apply(list)


A date
O [4,3,3] 2019-06-2
1 [4,5,2] 2019-06-3

但是如果想按多列分组怎么办?我已经尝试过类似的方法,但它似乎没有用:

df.groupby('date')[['A','B','C']].apply(list)

最终的 DataFrame 应该是这样的:

    A               B         C        date
O [4,3,3] [5,5,2] [5,2,1] 2019-06-2
1 [4,5,2] [4,4,3] [3,6,7] 2019-06-3

最佳答案

使用GroupBy.agg而不是 GroupBy.apply:

df1 = df.groupby('date')[['A','B','C']].agg(list).reset_index()
print (df1)
date A B C
0 2019-06-2 [4, 3, 3] [5, 5, 2] [5, 2, 1]
1 2019-06-3 [4, 5, 2] [4, 4, 3] [3, 6, 7]

编辑:如果想进行更多聚合,将其传递到列表中:

df2 = df.groupby('date')[['A','B','C']].agg(['mean','min','max', list])
print (df2)
A B C \
mean min max list mean min max list mean
date
2019-06-2 3.333333 3 4 [4, 3, 3] 4.000000 2 5 [5, 5, 2] 2.666667
2019-06-3 3.666667 2 5 [4, 5, 2] 3.666667 3 4 [4, 4, 3] 5.333333


min max list
date
2019-06-2 1 5 [5, 2, 1]
2019-06-3 3 7 [3, 6, 7]

然后可以展平 MultiIndex 列:

df2 = df.groupby('date')[['A','B','C']].agg(['mean','min','max', list])
df2.columns = df2.columns.map(lambda x: f'{x[0]}_{x[1]}')
df2 = df2.reset_index()
print (df2)
date A_mean A_min A_max A_list B_mean B_min B_max \
0 2019-06-2 3.333333 3 4 [4, 3, 3] 4.000000 2 5
1 2019-06-3 3.666667 2 5 [4, 5, 2] 3.666667 3 4

B_list C_mean C_min C_max C_list
0 [5, 5, 2] 2.666667 1 5 [5, 2, 1]
1 [4, 4, 3] 5.333333 3 7 [3, 6, 7]

关于python - 如何将多列分组以在 pandas DataFrame 中列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59665971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com