合并两个Pandas DataFrame的DatetimeIndex数据行

lc8prwob  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(149)

我尝试合并DatetimeIndex列上的两个Pandas DataFrame。每个df包含重叠时段的不同每日测量数据,一天中每行有几列。我希望以合并在DatetimeIndex上的df结束,每行仍有一天('inner'),以及原始两个dfs的所有度量列,但只有一列用于公共日期。只要日期是字符串,这就适用于pd.merge()。但是当我将它们转换为日期时间时,pd.merge()告诉我使用pd.concat()

df1 = pd.DataFrame(data=pd.date_range('2022-01-02','2022-01-04'), columns=['dtm'])
df1['var1'] = np.random.random(len(df1))

df2 = pd.DataFrame(data=pd.date_range('2022-01-01','2022-01-05'), columns=['dtm'])
df2['var2'] = np.random.random(len(df2))*100

print(pd.concat([df1,df2], axis=1, join='inner'))

然而,这给了我

dtm      var1        dtm       var2
0 2022-01-02  0.942075 2022-01-01  82.021265
1 2022-01-03  0.857628 2022-01-02  62.548033
2 2022-01-04  0.432774 2022-01-03   3.883448

例如,有两个dtm列,并且它们的日期是偏移的,我如何告诉pd.concat()dtm列上合并?

z9ju0rcb

z9ju0rcb1#

在两个数据框中创建DatetimeIndex

print(pd.concat([df1.set_index('dtm'),df2.set_index('dtm')], axis=1, join='inner'))
                var1       var2
dtm                            
2022-01-02  0.801879  81.125161
2022-01-03  0.473338  89.862602
2022-01-04  0.950536  63.681588

对于我来说,merge工作正常(两个DataFrame中的dtm列均由日期时间填充):

print(df1.merge(df2, on='dtm'))

         dtm      var1       var2
0 2022-01-02  0.875464  11.180980
1 2022-01-03  0.282619  73.407783
2 2022-01-04  0.802322  88.379740

相关问题