我有这个数据框:
x = pd.DataFrame({'colA':['A','A','A','B','C','C'], 'colB':['X','nm','X','nm','nm','nm']})
x
Out[254]:
colA colB
0 A X
1 A nm
2 A X
3 B nm
4 C nm
5 C nm
我想替换以下列B中的值:
对于列A的每个唯一值,如果colB包含值X,则将所有colB值替换为" X",即替换所有值' nm'对于A列的每组值,使用X.
如果A列中的组(例如,此示例中的值' C')不包含' X'在B栏中,然后离开' nm'单独
结果应为:
Out[254]:
colA colB
0 A X
1 A X
2 A X
3 B nm
4 C nm
5 C nm
我试图使用group by'并计算" X"的数量。 A列中每个唯一值中出现的值,但我觉得它非常错综复杂。希望有更简单的方法。
答案 0 :(得分:2)
您可以使用groupby.transform:
执行此操作x.groupby('colA')['colB'].transform(lambda col: 'X' if 'X' in col.values else 'nm')
Out:
0 X
1 X
2 X
3 nm
4 nm
5 nm
Name: colB, dtype: object
将其分配回来:
x['colB'] = x.groupby('colA')['colB'].transform(lambda col: 'X' if 'X' in col.values else 'nm')
x
Out:
colA colB
0 A X
1 A X
2 A X
3 B nm
4 C nm
5 C nm