python - 如何将列中的某些值移动到同一行的不同列
问题描述
我正在尝试解决这个问题,但我想不出逻辑,我想在 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
解决方案
您可以对数据框的每一行进行迭代:
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
在执行整个代码之前运行。
推荐阅读
- javascript - 使用 d3.scaleOrdinal 故障排除
- permissions - 您如何处理 ABP 中的 100 多个权限
- css - 如果其他渲染反应,我如何隐藏一个div?
- mysql - 使用 SQL 查找彼此最接近的坐标对
- javascript - 道具虽然在渲染中传递,但不会在路线中传递
- android - 在kotlin中接听电话时如何停止媒体播放器
- javascript - 如何将对象作为数据类型传递给选择元素并使其可读以在其他地方使用?
- javascript - 传播为对象数组创建新对象
- h5py - 当我尝试使用“a”打开文件时,H5Py 抛出 OSErrors
- python - 使用 tensorflow 2.0 通过索引列表索引和张量