我是Python的新手,我有一个数据框架,它是通过Pandas中的read_sql函数通过对Postgresql数据库的查询创建的,如下所示:
df = pd.read_sql(sql, conn, parse_dates={'asof_date'},index_col= ['asof_date']).返回的数据有三列,它们是如下所示的每日数据:
asof_date id data_value
2013-01-02 xxx 15.6
2013-01-03 xxx 15.9
2013-01-04 xxx 15.3
....
2015-06-29 xxx 14.075
2015-06-30 xxx 15.00现在,我正在尝试对此数据进行重新采样,以便只返回业务月末的值,如果我这样做:
df.resample('BM')id (非数字)列会自动删除,如果我像其他一些问题所建议的那样重新堆叠id列,它会给我一个错误。我已经尝试了不同的组合,就像各种帖子所建议的那样,但仍然没有成功。如果有人能对此有所了解,我将不胜感激。非常感谢。
发布于 2015-07-16 00:22:11
我在这个问题上使用的模式是对表进行pivot,这样您就只将日期作为索引。这将允许resample函数工作。
pd.pivot_table(df, index='asofdate',columns='id').resample('BM').stack().reset_index()然后,您可以对dataframe执行stack操作并重置索引,以将字段id放回列中。
发布于 2015-07-16 00:24:30
更新:
在玩弄了这个之后,我想我找到了我的问题的解决方案,就像JAB建议的那样。
我将首先使用列id进行分组:
grouped_by_id = df.groupby('id')在此之后,我将应用resample方法,然后使用reset_index()方法来返回一个DataFrame,它看起来与我之前的差不多:
resampled_data=grouped_by_id.resample('BM').reset_index()https://stackoverflow.com/questions/31433031
复制相似问题