具有条件限制的两个数据帧之间的列差异

问题描述 投票:0回答:1

上下文:我有 2 个不同系列的数据保存在 2 个数据框中:

index object  time
0     45      12.56416
1     30      10.61656
2     5       10.74478
3     8       56.14421
4     1       13.23214
5     45      58.56315

index object  time
0     45      12.56491
1     30      10.61656
2     15      189.74478
3     8       56.14421
4     45      98.23214
5     45      58.56410
6     5       10.74992

对于每个数据帧,我可以多次使用不同时间的对象。目标是比较它们之间的两个数据帧并显示如下结果:

object time_dataframe1  time_dataframe2  difference
45     12.56416         12.56491         |time_dataframe1-time_dataframe2|
45     58.56315         58.56410         0.00095
30     10.61656         10.61656         0.
8      56.14421         56.14421         0.
5      10.74412         10.74992         0.0058

这里的特殊性是比较 2 个数据帧之间的“相同”对象/时间,但时间关闭(这里我们应该确定精度 <0.01) and remove all the others.

我可以合并这两个数据框,但我不想比较数据框 1 本身的行。我该怎么做才能解决这个问题?

谢谢。

python pandas dataframe difference
1个回答
1
投票

使用

merge_asof

(pd.merge_asof(df1.sort_values(by='time')
                  .rename(columns={'time': 'time_dataframe1'}),
               df2.drop(columns='index').sort_values(by='time')
                  .rename(columns={'time': 'time_dataframe2'}),
               by='object',
               left_on='time_dataframe1', right_on='time_dataframe2',
               direction='nearest', tolerance=0.01
              )
    .dropna(subset=['time_dataframe2'])
    .assign(diff=lambda d: d['time_dataframe1'].sub(d['time_dataframe2']).abs())
    .sort_values(by='object', ascending=False)
)

输出:

   index  object  time_dataframe1  time_dataframe2     diff
2      0      45         12.56416         12.56491  0.00075
5      5      45         58.56315         58.56410  0.00095
0      1      30         10.61656         10.61656  0.00000
4      3       8         56.14421         56.14421  0.00000
1      2       5         10.74478         10.74992  0.00514
© www.soinside.com 2019 - 2024. All rights reserved.