我有一个数据框 df1:
ref Name id Score
4 8400 John 0 12
8 3840 Peter 414 0
15 7400 David 612 64
24 5200 Karen 0 0
我想用同一行的他们的索引(4,24)的值替换id列中的0所以它会变成:
ref Name id Score
8400 John 4 12
3840 Peter 414 0
7400 David 612 64
5200 Karen 24 0
然后我想将它与基于 id 值的另一个 df 进行比较,所以之后我需要再次删除放在 id 中的索引值。为了回到列id
的初始值最终输出将是:
ref Name id Score best_id
8400 John 0 12 8734
3840 Peter 414 0 7364
7400 David 612 64 4367
5200 Karen 0 0 3467
更新:这是df ref
Name ID
John 8734
Peter 7364
David 4367
Karen 3467
答案 0 :(得分:1)
我认为你应该看看df.mask()
>>> df['id'].mask(df['id'] == 0, df.index.to_series())
4 4
8 414
15 612
24 24
Name: id, dtype: int64
然后您可以将其分配给 df['id']
或将 inplace=True
传递给掩码函数。
答案 1 :(得分:0)
pandas.DataFrame.apply
为您想要的内容创建一个新列:
df['new_id'] = df.apply(lambda row: row.id or row.name, axis=1)
pandas.DataFrame.drop
删除它。
df.drop(columns=['new_id'], inplace=True)