首页 > 解决方案 > 如何将列中的某些值移动到同一行的不同列

问题描述

我正在尝试解决这个问题,但我想不出逻辑,我想在 B 列中移动一个具有“NAM”字样的值,并将其替换为具有“GMO”字样的 A 列。这是数据框

import pandas as pd

dataa = {'A':['NAM 1','NAM 2','NAM 3','GMO 12','NAM 5','GMO 2','NAM 7','NAM 8','GMO 32','GMO 22','NAM 11','NAM 12'],
         'B':['OBJ Y','OBJ N','OBJ Y','NAM 4','OBJ N','NAM 6','OBJ Y','OBJ Y','NAM 9','NAM 10','OBJ Y','OBJ N']
        }
df = pd.DataFrame(dataa)
df

    A         B
0   NAM 1   OBJ Y
1   NAM 2   OBJ N
2   NAM 3   OBJ Y
3   GMO 12  NAM 4
4   NAM 5   OBJ N
5   GMO 2   NAM 6
6   NAM 7   OBJ Y
7   NAM 8   OBJ Y
8   GMO 32  NAM 9
9   GMO 22  NAM 10
10  NAM 11  OBJ Y
11  NAM 12  OBJ N

输出应该是这样的:

A       B
0   NAM 1   OBJ Y
1   NAM 2   OBJ N
2   NAM 3   OBJ Y
3   NAM 12  NAM 4
4   NAM 5   OBJ N
5   NAM 2   NAM 6
6   NAM 7   OBJ Y
7   NAM 8   OBJ Y
8   NAM 32  NAM 9
9   NAM 22  NAM 10
10  NAM 11  OBJ Y
11  NAM 12  OBJ N

标签: pythonpandas

解决方案


您可以对数据框的每一行进行迭代:

for row, value in df.iterrows():
    if re.match('NAM\s', value[1]):
        df.iloc[row, 0] = df.iloc[row, 0].replace('GMO', 'NAM')
    else:
        pass

print(df)


    A       B
0   NAM 1   OBJ Y
1   NAM 2   OBJ N
2   NAM 3   OBJ Y
3   NAM 12  NAM 4
4   NAM 5   OBJ N
5   NAM 2   NAM 6
6   NAM 7   OBJ Y
7   NAM 8   OBJ Y
8   NAM 32  NAM 9
9   NAM 22  NAM 10
10  NAM 11  OBJ Y
11  NAM 12  OBJ N

逻辑:如果在该行的 B 列中检测到“NAM”,则访问 A 列并将“GMO”替换为“NAM”,否则什么也不做。请注意,上面的代码使用了 Python 的 regex 包,因此请import re在执行整个代码之前运行。


推荐阅读