我在熊猫中有一个带有DateTime索引的数据框。当使用时间pd.Grouper(freq='360Min')
分组器将其分组时,如何将该结果重新加入原始时间戳记?即Equijoin join 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
如何确保等分线再次起作用?即使用相同的任意频率将原始时间戳转换为拟合桶?
即在示例代码中描述,我如何获得:
agg_result['Publish date month'] = agg_result['Publish date'].apply(magic transform to same frequency bucket)
df.merge(agg_result, on['Publish date month'])
要工作,即定义对正确存储桶的转换?
编辑:
识别每个组的相应原始值的最简单方法应该是:
gb = df.groupby(pd.Grouper(key="Publish date", freq="1M"))
dict(list(gb['Publish date']))
然后,您可以使用它来将任何信息连接回原始表。
您可以只加入两个中间列吗?
df['Publish date'].dt.month
和
df.groupby(pd.Grouper(key="Publish date", freq="1M")).agg([pd.Series.mean, pd.Series.median]).index.month
像这样
results = df.groupby(pd.Grouper(key="Publish date", freq="1M")).agg([pd.Series.mean, pd.Series.median])
results.columns = ['-'.join(col[::-1]).strip() for col in results.columns]
df['month'] = df['Publish date'].dt.month
results['month'] = results.index.month
results.merge(df)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句