我有两个数据框。一个有精确的(每日)DateTimeIndex。我已使用该索引使用groupby(['groupid', pd.TimeGrouper('1M', closed='left', label='left')])创建月度统计数据。

现在,我想将信息合并回原始数据帧。但是,折叠后的数据框的日期时间标签当然与原始DateTimeIndex并不完全对应。因此,我想将它们与相应的月份年份信息进行匹配。

我该怎么办?

                         statistics
  date          groupid
  2001-01-31          1          10
  2001-02-31          1          11


和原始数据框

  date          groupid         foo
  2001-01-25          1           1
  2001-01-28          1           2
  2001-02-02          1           4


预期产量

  date          groupid         foo     statistics
  2001-01-25          1           1             10
  2001-01-28          1           2             10
  2001-02-02          1           4             11

最佳答案

您可以先按to_period然后按merge创建月份为新的列,由于2001-02-31不存在,也有必要将2001-02-28df1更改为31. February

df1['per'] = df1.index.get_level_values('date').to_period('M')
df2['per'] = df2.date.dt.to_period('M')
print (df1)
                    statistics     per
date       groupid
2001-01-31 1                10 2001-01
2001-02-28 1                11 2001-02

print (df2)
        date  groupid  foo     per
0 2001-01-25        1    1 2001-01
1 2001-01-28        1    2 2001-01
2 2001-02-02        1    4 2001-02

print (pd.merge(df2, df1.reset_index(level=1), on=['per','groupid'], how='right')
         .drop('per', axis=1))

        date  groupid  foo  statistics
0 2001-01-25        1    1          10
1 2001-01-28        1    2          10
2 2001-02-02        1    4          11

关于python - 将DateTimeIndex与月-年合并,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41824899/

10-12 18:45