坚强。
从此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。 / p>
因此新的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 |
答案 0 :(得分:2)
按掩码比较值,按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