bk201:
難しいもの。
このデータフレームを開始します。
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
列、およびと呼ばれる3番目の列を追加unique_above_10
し、1と> 10であるGROUPBYで唯一の価値がある場合は1に値を設定します。
だから、新しいデータフレームは次のようになります。
| 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 |
エズレル:
マスクして値を比較し、マッチした値をカウントsum
して、グループごとGroupBy.transform
で比較する、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