【发布时间】:2018-02-24 10:38:27
【问题描述】:
对于一个名为 full_df 的给定 pandas 数据框,它看起来像
index id timestamp data
------- ---- ------------ ------
1 1 2017-01-01 10.0
2 1 2017-02-01 11.0
3 1 2017-04-01 13.0
4 2 2017-02-01 1.0
5 2 2017-03-01 2.0
6 2 2017-05-01 9.0
开始和结束日期(以及开始和结束之间的时间差)是不同的。
但我需要一个 id 明智的重采样版本(添加了标有 * 的行)
index id timestamp data
------- ---- ------------ ------ ----
1 1 2017-01-01 10.0
2 1 2017-02-01 11.0
3 1 2017-03-01 NaN *
4 1 2017-04-01 13.0
5 2 2017-02-01 1.0
6 2 2017-03-01 2.0
7 2 2017-04-01 NaN *
8 2 2017-05-01 9.0
因为数据集非常大,我想知道是否有比这样做更有效的方法
- 做
full_df.groupby('id') -
为每个组做
dfdf.index = pd.DatetimeIndex(df['timestamp']) all_days = pd.date_range(df.index.min(), df.index.max(), freq='MS') df = df.reindex(all_days) 使用新索引再次组合所有组
这很耗时而且不是很优雅。有什么想法吗?
【问题讨论】:
-
每个
id的开始结束日期都不同。 -
您在 id 2 的起始样本中有
2017-05-01 -
对不起,复制粘贴错误。修复。谢谢指出!
-
一个小注,
all也是内置的。为避免进一步出现奇怪的麻烦,您可能需要为 DataFrame 选择一个不同的名称 -
我将
all重命名为full_df。