【问题标题】:Joining dataframes on multiple columns with one column toleranced?将多列上的数据框连接到一列公差?
【发布时间】:2019-06-27 15:18:45
【问题描述】:

您好,在多列上将两个数据框连接在一起的有效方法是什么,除了选择数字(在本例中为一个)之外的所有列都不是完全匹配的?

编辑:根据 Ben 的建议,['A', 'B', 'D',] 构成 df1 和 df2 的唯一 ID,df1 上的连接应该是唯一的,并且 df1.shape != df2.shape .

即:

df1
    A       B    C    D
1   Apple   21   10   a
2   Pear    90   12   a
3   Apple   31   11   b
4   Apple   71   14   c
5   Apple   45   15   d
6   Pear    14   13   b

df2
    A       B    E    D
1   Apple   22   50   a
2   Pear    89   46   a
3   Apple   30   56   b
4   Apple   72   60   c

加入 ['A', 'B', 'D',] 其中 B 具有容差和 +/- 1。导致

    A       B    C    D    E
1   Apple   21   10   a    50
2   Pear    90   12   a    46
3   Apple   31   11   b    56
4   Apple   71   14   c    60
5   Apple   45   15   d    NaN
6   Pear    14   13   b    NaN

【问题讨论】:

    标签: pandas


    【解决方案1】:

    merge_asoftolerance 一起使用

    pd.merge_asof(df1.sort_values('B'),df2.sort_values('B'),by=['A','D'],on='B',tolerance=1,direction='nearest')
    
    Out[306]: 
           A   B   C  D     E
    0   Pear  14  13  b   NaN
    1  Apple  21  10  a  50.0
    2  Apple  31  11  b  56.0
    3  Apple  45  15  d   NaN
    4  Apple  71  14  c  60.0
    5   Pear  90  12  a  46.0
    

    【讨论】:

    • 对不起,我应该详细说明一下,df1 和 df2 是不同的形状,匹配应该或多或少是唯一的,并且 ['A', 'B, 'D'] 将为行。
    • @RoyHan 我没有做任何改变,输出符合你的需要,只是你需要取回订单
    • 再次感谢本!
    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 2019-04-17
    • 2021-10-22
    • 2020-11-08
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2019-11-22
    相关资源
    最近更新 更多