PANDAS数据帧中元素的交换

3
下面是一个表格:
    A NUMBER    B NUMBER
    7042967611  9999574081
    12320       9999574081
    9999574081  9810256463
    9999574081  9716551924
    9716551924  9999574081  
    9999574081  8130945859

这原本是一个Excel表格,现在已经转换成为数据帧。我想交换一些元素,使得“A number”列只有9999574081。 因此,输出应该如下:

    A NUMBER    B NUMBER
    9999574081  7042967611  
    9999574081  12320       
    9999574081  9810256463
    9999574081  9716551924
    9999574081  9716551924  
    9999574081  8130945859

这是我使用的代码:
for i in list(df['A NUMBER']):
    j=0
    if i!= 9999574081:
        temp = df['B NUMBER'][j]
        df['B NUMBER'][j] = i
        df['A NUMBER'][j] = temp
    j+=1

然而,我没有得到期望的结果。请帮我一下。谢谢 :)
1个回答

1

使用 DataFrame.loc 仅交换符合布尔掩码的行,values 是必需的以避免对齐索引值:

m = df['A NUMBER'] != 9999574081

df.loc[m, ['A NUMBER','B NUMBER']] = df.loc[m, ['B NUMBER','A NUMBER']].values

另一种使用 numpy.where 的解决方案是:
df['B NUMBER'] = np.where(df['A NUMBER'] != 9999574081, df['A NUMBER'], df['B NUMBER'])
df['A NUMBER'] = 9999574081

print (df)
     A NUMBER    B NUMBER
0  9999574081  7042967611
1  9999574081       12320
2  9999574081  9810256463
3  9999574081  9716551924
4  9999574081  9716551924
5  9999574081  8130945859

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接