我想按2条标准汇总pandas df列。
1)首先,我要对col1进行分组
2)仅当col2具有匹配0的最小一行和匹配1的最小一行时,我才需要col3的平均值。
我尝试了一些组合,但这当然不起作用:
df.groupby(['col1'])['col2'].isin([0 & 1]).col3.mean()
例如,如果这是我的df:
df = pd.DataFrame({
'col1' : ['a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
'col2' : [ 0, 0, 1, 0, 1, 1, 1, 0, 1, 0],
'col3' : [ 3, 4, 2, 4, 1, 2, 3, 5, 2, 1]
})
>>>
col1 col2 col3
0 a 0 3
1 a 0 4
2 b 1 2
3 b 0 4
4 c 1 1
5 c 1 2
6 c 1 3
7 d 0 5
8 d 1 2
9 d 0 1
我想看的是:
col1 col2 mean(col3)
b 1 2
b 0 4
d 0 3
d 1 2
答案 0 :(得分:2)
您的主要问题是过滤之一。有几种方法可以执行此操作,但一种方法是计算每个组的nunique
计数。
u = df[df.groupby('col1').col2.transform('nunique').gt(1)]
col1 col2 col3
2 b 1 2
3 b 0 4
7 d 0 5
8 d 1 2
9 d 0 1
如果col2在一个组中具有0和1,则唯一计数将大于1。
现在,像往常一样致电groupby
。
u.groupby(['col1', 'col2'], as_index=False).col3.mean()
col1 col2 col3
0 b 0 4
1 b 1 2
2 d 0 3
3 d 1 2