【发布时间】:2020-12-29 10:45:23
【问题描述】:
我在 pandas 中有一个带有 DateTime 索引的数据框。
当使用 time grouper:pd.Grouper(freq='360Min') 对其进行分组时,如何将此结果加入原始时间戳?
IE。 equijoin timestamp=bucket 不起作用?
有便利功能吗?
应该使用asof 连接吗?
还是我必须手动提取小时数,然后尝试匹配?
示例:
来源
import pandas as pd
df = pd.DataFrame(
{
"Publish date": [
pd.Timestamp("2000-01-02"),
pd.Timestamp("2000-01-02"),
pd.Timestamp("2000-01-09"),
pd.Timestamp("2000-01-16")
],
"ID": [0, 1, 2, 3],
"Price": [10, 20, 30, 40]
}
)
这给出了:
Publish date ID Price
0 2000-01-02 0 10
1 2000-01-02 1 20
2 2000-01-09 2 30
3 2000-01-16 3 40
我想以任意频率(不仅是月、日、小时)执行聚合,比如说 1
month.
agg_result = df.groupby(pd.Grouper(key="Publish date", freq="1M")).agg([pd.Series.mean, pd.Series.median]).reset_index()
agg_result.columns = ['_'.join(col).strip() for col in agg_result.columns.values]
agg_result.columns = ['Publish date month', 'ID_mean', 'ID_median', 'Price_mean', 'Price_median']
print(agg_result)
Publish date month ID_mean ID_median Price_mean Price_median
0 2000-01-31 1.5 1.5 25 25
如何确保等值连接再次起作用? IE。使用相同的任意频率将原始时间戳转换为拟合桶?
即示例代码中描述的,如何获取:
agg_result['Publish date month'] = agg_result['Publish date'].apply(magic transform to same frequency bucket)
df.merge(agg_result, on['Publish date month'])
工作,即定义到正确存储桶的转换?
【问题讨论】:
标签: python pandas group-by time-series datetimeindex