我有 3 列 ID,我想将它们合并为一个列,如下例所示。这里的目标是简单地用 ID1 或 ID2 中的值替换主列中的所有 0,并将分数列保持在最右侧。
注意,Main ID 列也有第 3 行已经有值的情况,在这种情况下,什么都不用做。最终尝试获得所需输出中所示的单列。尝试使用一些迭代循环,但它不是 Pythonic 方法。
数据表
Main ID ID_1 ID_2 SCORE
0 0 121231 212
0 54453 0 199
12123 12123 0 185
343434 0 343434 34
2121 0 0 66
0 0 11 565
期望的输出:
MAIN ID SCORE
121231 212
54453 199
12123 185
343434 34
2121 66
11 565
更新,应用 bfill
方法将所有“MAIN_ID”数字更改为科学记数法,例如:3.43559e+06
答案 0 :(得分:1)
用bfill
试试mask
out = df.mask(df.eq(0)).bfill(1)[['Main ID']]
答案 1 :(得分:1)
这个对我有用,它很简单但很实用:D
import pandas as pd
d = {'MAIN ID' : [0,0,12123,343434,2121,0], 'ID_1': [0,54453,12123,0,0,0],'ID_2':[121231,0,0,343434,0,11]}
df = pd.DataFrame(data=d)
for i in range(len(df)):
if df.iloc[i]['MAIN ID'] == 0:
if df.iloc[i]['ID_1'] != 0:
df.iloc[i]['MAIN ID'] = df.iloc[i]['ID_1']
else:
df.iloc[i]['MAIN ID'] = df.iloc[i]['ID_2']
df = df.drop(['ID_1', 'ID_2'], axis=1)