gpt4 book ai didi

python - 根据来自另一列 pandas 的相同或更接近的值替换列中的值

转载 作者:行者123 更新时间:2023-12-05 09:28:52 25 4
gpt4 key购买 nike

我有两个数据框:

DF1:

<表类="s-表"><头>得分 1平均生命周期<正文>4.0339863482.09.103820758.0-1.3443268000.0218670040.033708.02.291000432.0

DF2:

<表类="s-表"><头>得分 1<日>生活 <正文>3.03398609.10382009.10382007.35098101.44340009.1038200-1.1344860

如果两个数据帧中的“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_结果:

<表类="s-表"><头>得分 1<日>生活 <正文>3.0339863482.09.103820758.09.103820758.07.350981758.01.443400432.09.103820758.0-1.13448668000.0

我希望我说清楚了......

感谢大家的帮助!

最佳答案

首先我们找到与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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com