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

标签 python python-3.x pandas dataframe numpy

我有两个数据框:

DF1:

<表类="s-表"> <头> 得分 1 平均生命周期 <正文> 4.033986 3482.0 9.103820 758.0 -1.34432 68000.0 218670040.0 33708.0 2.291000 432.0

DF2:

<表类="s-表"> <头> 得分 1 <日>生活 <正文> 3.033986 0 9.103820 0 9.103820 0 7.350981 0 1.443400 0 9.103820 0 -1.134486 0

如果两个数据帧中的“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.033986 3482.0 9.103820 758.0 9.103820 758.0 7.350981 758.0 1.443400 432.0 9.103820 758.0 -1.134486 68000.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/

相关文章:

python - 即使脚本只运行一次,Pypy JIT 也会提高速度?

python - Python中许多列表的连接

python - 迭代到多级 pandas DataFrame 的优雅方法

python - Pandas 中的 Vlookup 功能完全相同

python - 为什么我在 pandas 列中只得到一项(而不是多项)?

python - numpy flatten - 如何打印输出

python清除csv文件

python - Pandas GroupBy 内存释放

python - 在 python 中,如何创建一个在运行时之前未指定名称的新变量(编辑 : How do you use setattr() with a list compehension)?

python - 将多个字典以长格式合并到一个 pandas 数据框中