我正试图在GroupBy.transform
上使用df
创建一个布尔列,
id type
1 1.00000
1 1.00000
2 2.00000
2 3.00000
3 2.00000
代码就像,
df['has_two'] = df.groupby('id')['type'].transform(lambda x: x == 2)
但是has_two
不是布尔值,而是具有浮点值,例如0.0
。我想知道为什么会这样。
更新
我创建了一个测试用例,
df = pd.DataFrame({'id':['1', '1', '2', '2', '3'], 'type':[1.0, 1.0, 2.0, 1.0, 2.0]})
df['has_2'] = df.groupby('id')['type'].transform(lambda x: x == 2)
这给了我,
id type has_2
0 1 1.0 0.0
1 1 1.0 0.0
2 2 2.0 1.0
3 2 1.0 0.0
4 3 2.0 1.0
如果按照df['has_2'] = df['type'] == 2
的建议使用jezrael
,则可以,
id type has_2
0 1 1.0 False
1 1 1.0 False
2 2 2.0 True
3 2 1.0 False
4 3 2.0 True
我在pandas==0.20.3
上使用Python 3.5.2
。我想知道发生了什么,我需要pandas
或python 3
更新吗?
更新
将pandas
更新为0.22.0
解决了此问题。
答案 0 :(得分:2)
对我来说它工作得很好,我得到布尔列:
df['has_two'] = df.groupby('id')['type'].transform(lambda x: x == 2)
print (df)
id type has_two
0 1 1.0 False
1 1 1.0 False
2 2 2.0 True
3 2 3.0 False
4 3 2.0 True
但也许只能比较专栏:
df['has_two'] = df['type'] == 2
print (df)
id type has_two
0 1 1.0 False
1 1 1.0 False
2 2 2.0 True
3 2 3.0 False
4 3 2.0 True
答案 1 :(得分:0)
使用此行
df['has_two'] = df.groupby('id')['type'].transform(lambda x: x == 2) == 2
为我工作:)