gpt4 book ai didi

数据框上的 python pandas 条件总和,它在多列上分组

转载 作者:行者123 更新时间:2023-11-28 16:25:54 31 4
gpt4 key购买 nike

为了说明我的问题,我有一个示例数据框

df = pd.DataFrame({'key1': [0, 0, 0, 0, 1, 1, 1, 1, 1, 1], 
'key2': ['a', 'b', 'b', 'c', 'a', 'a', 'a', 'b', 'b', 'c'],
'key3': [10, 5, 15, 10, 5, 10, 20, 10, 20, 5],
'zdata': [2, 4, 2, 4, 3, 5, 6, 5, 5, 6]})

什么时候

df1 = df.groupby(['key1', 'key2', 'key3'])
df1 = df1.agg({'zdata' : [np.mean]})

产生

                zdata
mean
key1 key2 key3
0 a 10 2
b 5 4 * (new group1)
15 2 * (new group1)
c 10 4
1 a 5 3 * (new group2)
10 5 * (new group2)
20 6 * (new group2)
b 10 5
20 5
c 5 6

我现在需要通过对 key1 和 key2 进行分组来找到 zdata 和 key3 的平均值,仅当 key3 具有“5”和任何其他数字(即上表中标有 * 的行)

所以想要的结果是

                zdata
mean
key1 key2 key3
0 b 10 3
1 a 11.6 4.6

我确信 lambda 函数会像这个例子一样到达那里 [ Python Pandas Conditional Sums但是这个问题在多个列上分组

任何帮助将不胜感激。

最佳答案

我认为更好的方法是使用 groupbymean作为 agg,因为结果是 DataFrame,列中没有 Multiindex。然后你可以使用filteranylen 最后一个 groupbymean再次:

#instaed of agg use:
df1 = df.groupby(['key1', 'key2', 'key3'], as_index=False)['zdata'].mean()
print df1
key1 key2 key3 zdata
0 0 a 10 2
1 0 b 5 4
2 0 b 15 2
3 0 c 10 4
4 1 a 5 3
5 1 a 10 5
6 1 a 20 6
7 1 b 10 5
8 1 b 20 5
9 1 c 5 6

#filter rows by conditions
df2 = df1.groupby(['key1', 'key2']).filter(lambda x: (x.key3 == 5).any() & (len(x) > 1))
print df2
key1 key2 key3 zdata
1 0 b 5 4
2 0 b 15 2
4 1 a 5 3
5 1 a 10 5
6 1 a 20 6

print df2.groupby(['key1', 'key2'], as_index=False).mean()
key1 key2 key3 zdata
0 0 b 10.000000 3.000000
1 1 a 11.666667 4.666667

关于数据框上的 python pandas 条件总和,它在多列上分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36673447/

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