python - Pandas df groupby 不同列上的某些匹配

标签 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

最佳答案

您的主要问题是过滤问题。有几种方法可以做到这一点,但一种方法是计算每个组的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 一组,则 nunique 计数将大于 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

关于python - Pandas df groupby 不同列上的某些匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54601423/

相关文章:

python - 调整 Bokeh 图的标题字体大小

python - 如何对 Pandas 中的两个领域进行分组?

python - 在分类系列上合并 Pandas 数据框

python - 使用 Pandas,我如何根据第一个空间进行拆分。

python - 返回包含字符串列中存在的关键字列表的列 - Pandas

c# - LINQ.Aggregate 返回不正确的结果

mysql inner 加入 group by

python - Socket.py权限错误

python - 循环遍历 Pandas 数据框列中的列表元素以返回新列中的列表

python - python中2个程序之间的通信