仅比较具有相同日期时间索引的列值

时间:2020-04-14 01:03:09

标签: python pandas dataframe datetime

我从07:00:00到20:00:00(df1)有一个较长的df,而一个短df仅包含了一个长的df(df2)(相同的日期时间索引值)。

我想比较两个数据帧的分组大小值。

日期时间索引,id,x和y值应相同。

我可以这样做吗?

df1:

Out[180]: 

date                     id       gs   x    y                                          
2019-10-09 07:38:22.139  3166     nan  248  233
2019-10-09 07:38:25.259  3166     nan  252  235
2019-10-09 07:38:27.419  3166     nan  253  231
2019-10-09 07:38:30.299  3166     nan  251  232
2019-10-09 07:38:32.379  3166     nan  251  233
2019-10-09 07:38:37.179  3166     nan  228  245
2019-10-09 07:39:49.498  3167     nan  289  253
2019-10-09 07:40:19.099  3168     nan  288  217
2019-10-09 07:40:38.779  3169     nan  278  139
2019-10-09 07:40:39.899  3169     nan  279  183
...
2019-10-09 19:52:53.959  5725     nan  190  180
2019-10-09 19:52:56.439  5725     nan  193  185
2019-10-09 19:52:58.919  5725     nan  204  220
2019-10-09 19:53:06.440  5804     nan  190  198
2019-10-09 19:53:08.919  5804     nan  200  170
2019-10-09 19:53:11.419  5804     nan  265  209
2019-10-09 19:53:16.460  5789     nan  292  218
2019-10-09 19:53:36.460  5806     nan  284  190
2019-10-09 19:54:08.939  5807     nan  404  226
2019-10-09 19:54:23.979  5808     nan  395  131

df2:

Out[181]: 

date                     id    gs   x    y                                       
2019-10-09 11:20:01.418  3479  2.0  353  118.0
2019-10-09 11:20:01.418  3477  2.0  315   92.0
2019-10-09 11:20:01.418  3473  2.0  351  176.0
2019-10-09 11:20:01.418  3476  2.0  318  176.0
2019-10-09 11:20:01.418  3386  0.0  148  255.0
2019-10-09 11:20:01.418  3390  0.0  146  118.0
2019-10-09 11:20:01.418  3447  0.0  469  167.0
2019-10-09 11:20:03.898  3447  0.0  466  169.0
2019-10-09 11:20:03.898  3390  0.0  139  119.0
2019-10-09 11:20:03.898  3477  2.0  316   93.0

预期输出应为数据列,其列为“ date”,“ id”,“ x”,“ y”,“ gs(df1)”,“ gs(df2)”

1 个答案:

答案 0 :(得分:1)

在所有条件都相同的情况下进行合并,但请确保重置索引,使其成为合并条件的一部分

df1_t = df1.reset_index()
df2_t = df1.reset_index()

results = df1_t.merge(df2_t, left_on = ['date', 'ids', 'x', 'y'],
                      right_on = ['date', 'ids', 'x', 'y'], 
                      indicator = True).reset_index()

print(results)

results将具有df1df2上的行。