gpt4 book ai didi

python - 使用 apply() 合并 Pandas DataFrame 仅在两列中部分匹配时合并

转载 作者:行者123 更新时间:2023-11-28 21:32:45 26 4
gpt4 key购买 nike

我需要合并两个 pandas DataFrame,但不仅要合并精确的列值,还要合并近似的列值。

例如,我有这两个 DataFrame:

import pandas as pd
d = {'col1': ["a", "b", "c", "d"], 'col2': [3, 4, 66, 120]}
df = pd.DataFrame(data=d)

col1 col2
0 a 3
1 b 4
2 c 66
3 d 120

d2 = {'col1a': ["aa", "bb", "cc", "dd"], 'col2b': [3, 4, 67, 100]}
df2 = pd.DataFrame(data=d2)
col1a col2b
0 aa 3
1 bb 4
2 cc 67
3 dd 100

现在,如果我只是将它们加入 col2col2b 列,我只会得到列值完全相同的两行。

pd.merge(df, df2, how='inner', left_on='col2', right_on='col2b')
col1 col2 col1a col2b
0 a 3 aa 3
1 b 4 bb 4

现在,为了简单起见,我还想根据左侧 DataFrame 整数值的 +1 或 -1 来合并列值。在左侧 DataFrame 的示例中,除了具有值 3 的行之外,值 66 还应与右侧 DataFrame 中的值 67 相匹配> 和 4:

        col1    col2    col1a   col2b
0 a 3 aa 3
1 b 4 bb 4
2 c 66 cc 67

不确定如何解决这个问题,不知何故需要使用 apply() 根据近似列值进行合并?

最佳答案

这是merge_asof的一种方法

pd.merge_asof(df,df2,left_on='col2',right_on='col2b',tolerance = 1,direction ='nearest').dropna()
Out[7]:
col1 col2 col1a col2b
0 a 3 aa 3.0
1 b 4 bb 4.0
2 c 66 cc 67.0

关于python - 使用 apply() 合并 Pandas DataFrame 仅在两列中部分匹配时合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55812825/

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