Pandas Group by TimeGrouper

时间:2017-06-28 08:25:09

标签: python pandas

我想按月分组我的数据,选择每个月的最后一行。

数据:

>>> df
Date
1985-10-14    46.50
1985-10-23    47.50
1985-10-24    46.88
1985-11-21    50.25
1985-11-22    50.38
1985-11-25    50.38
>>> df.groupby(pd.TimeGrouper('M')).nth(-1)
Date
1985-10-31    46.88
1985-11-30    50.38

预期结果:

1985-10-24    46.88
1985-11-25    50.38

1 个答案:

答案 0 :(得分:1)

我认为您首先需要mstest /testcontainer:TestProject.dll /category:"Integration" 创建DatetimeIndex列,然后reset_index使用resample,最后删除index

print (df)
              col
Date             
1985-10-14  46.50
1985-10-23  47.50
1985-10-24  46.88
1985-11-21  50.25
1985-11-22  50.38
1985-11-25  50.38


df = df.reset_index().resample('M', on='Date').last().reset_index(drop=True)
print (df)
        Date    col
0 1985-10-24  46.88
1 1985-11-25  50.38

对于较旧版本,请从索引创建列:

df = df.assign(Date=df.index).resample('M').last().reset_index(drop=True)
print (df)
     col       Date
0  46.88 1985-10-24
1  50.38 1985-11-25
df['Date'] = df.index
df = df.resample('M').last().reset_index(drop=True)
print (df)
     col       Date
0  46.88 1985-10-24
1  50.38 1985-11-25