我有两个数据框:
DF1:
DF2:
如果两个数据帧中的“Score 1”列相同,则第二个数据帧中“life”中的 0 值应替换为第一个数据帧中“avg life”中的值。顺便说一句,如果没有相同的值,我们会从 DF1 中的“Score1”中获取最接近 DF2 中“Score1”的值。
问题出在“最接近”这个词上。
例如: 我在“Score 1”的 DF1 中没有值“3.033986”,但我想取最接近这个值 - “4.033986”并将“life”列中的 0 从“Avg_life”更改为“3482.0”,因为“3.033986”更接近于“4.033986”。
结果应该是这样的:
DF_结果:
我希望我说清楚了......
感谢大家的帮助!
最佳答案
首先我们找到与df2['Score1']
中的每个值最接近的值if df1['Score1']
,并将其放入df2['匹配']
:
df2['match'] = df2['Score1'].apply(lambda s : min(df1['Score1'].values, key = lambda x: abs(x-s)))
df2
现在看起来像这样
Score1 life match
0 3.033986 0 2.29100
1 9.103820 0 9.10382
2 9.103820 0 9.10382
3 7.350981 0 9.10382
4 1.443400 0 2.29100
5 9.103820 0 9.10382
6 -1.134486 0 -1.34432
现在我们只是在 match
上合并,删除不需要的列并重命名其他列
(df2[['match', 'Score1']].merge(df1, how = 'left', left_on = 'match', right_on = 'Score1', suffixes = ['','_2'])
.rename(columns = {'Avg_life':'life'})
.drop(columns = ['match', 'Score1_2'])
)
输出
Score1 life
0 3.033986 432.0
1 9.103820 758.0
2 9.103820 758.0
3 7.350981 758.0
4 1.443400 432.0
5 9.103820 758.0
6 -1.134486 68000.0
关于python - 根据来自另一列 pandas 的相同或更接近的值替换列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70990504/