Pandas 熊猫重新采样数据帧并将datetime索引保留为列
我正在尝试使用pandas将每日数据重新采样为每周数据 我正在使用以下命令:Pandas 熊猫重新采样数据帧并将datetime索引保留为列,pandas,pivot,Pandas,Pivot,我正在尝试使用pandas将每日数据重新采样为每周数据 我正在使用以下命令: weekly_start_date =pd.Timestamp('01/05/2011') weekly_end_date =pd.Timestamp('05/28/2013') daily_data = daily_data[(daily_data["date"] >= weekly_start_date) & (daily_data["date"] <= weekly_end_date)]
weekly_start_date =pd.Timestamp('01/05/2011')
weekly_end_date =pd.Timestamp('05/28/2013')
daily_data = daily_data[(daily_data["date"] >= weekly_start_date) & (daily_data["date"] <= weekly_end_date)]
daily_data = daily_data.set_index('date',drop=False)
weekly_data = daily_data.resample('7D',how=np.sum,closed='left',label='left')
weekly\u start\u date=pd.时间戳('01/05/2011')
每周结束日期=pd时间戳('05/28/2013')
每日数据=每日数据[(每日数据[“日期”]>=每周开始日期)和(每日数据[“日期”]您只能按数字列重新采样:
In [11]: df = pd.DataFrame([[pd.Timestamp('1/1/2012'), 1, 'a', [1]], [pd.Timestamp('1/2/2012'), 2, 'b', [2]]], columns=['date', 'no', 'letter', 'li'])
In [12]: df1 = df.set_index('date', drop=False)
In [13]: df1
Out[13]:
date no letter li
date
2012-01-01 2012-01-01 00:00:00 1 a [1]
2012-01-02 2012-01-02 00:00:00 2 b [2]
In [15]: df1.resample('M', how=np.sum)
Out[15]:
no
date
2012-01-31 3
我们可以看到,它使用数据类型来确定它是否为数字:
In [16]: df1.no = df1.no.astype(object)
In [17]: df1.resample('M', how=sum)
Out[17]:
date no letter li
date
2012-01-31 0 0 0 0
实际求和的一个可怕的技巧:
In [21]: rng = pd.date_range(weekly_start_date, weekly_end_date, freq='M')
In [22]: g = df1.groupby(rng.asof)
In [23]: g.apply(lambda t: t.apply(lambda x: x.sum(1))).unstack()
Out[23]:
date no letter li
2011-12-31 2650838400000000000 3 ab [1, 2]
日期是纪元纳秒的总和
(希望我在做一些愚蠢的事情,还有一个更简单的方法!)如果我理解你的问题,看起来你做的重采样是正确的(这里是关于重采样的文档:)
如果唯一的问题是希望在列中复制DateTimeIndex,则可以这样做
weekly_data['date'] = weekly_data.index.values
如果我误解了这个问题,我深表歉意。:)您希望这里的日期栏是什么?它已被重新采样(每周)通过sum,我认为再也没有意义了。你希望什么?@Andy我希望得到一周中的第一个日期,例如一周开始,如果你真的想知道,你可以说重新采样间隔中的日期中值wanted@Jeff当我写第一行的时候,我在想这是一个谎言:史坦克斯·安迪,所有的价值观在我的数据帧中是数字的。重采样在我的代码中起作用。但是我需要在重采样df中将日期作为一列。当我使用“7D”重采样时,我没有得到它。日期列是dropped@user2484945日期不是数字(它是一个日期)?你能举一个我们能看到的小例子,说明你的问题+你想要什么吗?@user2484945你介意将其编辑到你的问题中吗(评论中的格式设置不好):)
weekly_data['date'] = weekly_data.index.values