根据其他列值在数据框列中交换记录

时间:2017-07-11 17:22:22

标签: python dataframe

我有一个数据框如下:

A     B    C
315  105  ABC
315  135  ABC
105  44   ABC
105  70   ABC
105  72   ABC
105  315  XYZ
105  319  XYZ

如果C列中的值是XYZ,我需要交换Col A&中的值。 B,否则让它原样。

实现这一目标的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

找出C == XYZ

的行
idx = df.C == 'XYZ'

然后使用loc找到列AB中的值,交换值并将其分配回来;请注意values将结果从数据框转换为numpy数组,以便赋值不会尝试对齐列索引(这将导致无效):

df.loc[idx, ['A', 'B']] = df.loc[idx, ['B', 'A']].values

df
#     A   B   C
#0  315 105 ABC
#1  315 135 ABC
#2  105 44  ABC
#3  105 70  ABC
#4  105 72  ABC
#5  315 105 XYZ
#6  319 105 XYZ