Python基于其他值更改列

时间:2017-06-29 16:34:35

标签: python pandas

我有这个数据框:

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列中每个唯一值中出现的值,但我觉得它非常错综复杂。希望有更简单的方法。

1 个答案:

答案 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