[英]Pandas: removing everything in a column after first value above threshold
[英]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.