熊猫df grouby在不同列上的某些匹配项

时间:2019-02-08 23:04:31

标签: python pandas aggregate pandas-groupby

我想按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

1 个答案:

答案 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