繁体   English   中英

Pandas 按阈值以上的唯一值分组

[英]Pandas group by unique value above a threshold

艰难的一个。

从这个 DataFrame 开始:

df = pd.DataFrame({
    'number':[4.4,11, 2.4,5, 12,22],
    'id': [1,1, 2,2, 3,3]
})
| number | id | 
|--------|----|
| 4.4    | 1  |
| 11     | 1  |
| 2.4    | 2  |
| 5      | 2  |
| 12     | 3  | 
| 22     | 3  |

我想按id列分组,并添加名为unique_above_10的第三列,如果 groupby 中只有一个且大于 10 的值,则将该值设置为 1。

所以新的 DataFrame 应该是这样的:

| number | id | unique_above_10 |
|--------|----|-----------------|
| 4.4    | 1  | 0               |
| 11     | 1  | 1               |
| 2.4    | 2  | 0               |
| 5      | 2  | 0               |
| 12     | 3  | 0               |
| 22     | 3  | 0               |


按掩码比较值GroupBy.transform按每组sum计算匹配值,按1比较并按&为按位AND按掩码m计算匹配值:

m = df['number'].gt(10)
df['unique_above_10'] = (m.groupby(df['id']).transform('sum').eq(1) & m).astype(int)
print (df)
   number  id  unique_above_10
0     4.4   1                0
1    11.0   1                1
2     2.4   2                0
3     5.0   2                0
4    12.0   3                0
5    22.0   3                0

详情

print (m)
0    False
1     True
2    False
3    False
4     True
5     True
Name: number, dtype: bool

print (m.groupby(df['id']).transform('sum'))
0    1.0
1    1.0
2    0.0
3    0.0
4    2.0
5    2.0
Name: number, dtype: float64

print (m.groupby(df['id']).transform('sum').eq(1))
0     True
1     True
2    False
3    False
4    False
5    False
Name: number, dtype: bool

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM