【发布时间】:2016-08-26 14:04:32
【问题描述】:
假设我在 DataFrame df 中有一些数据。特别是,df.columns 是一个 MultiIndex,其中第一级表示我们正在处理的“什么样的数据”,第二级表示某种 ID。首先,最外层的列级别只有一个唯一值:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(400, 5), columns=list('abcde'))
df.columns = pd.MultiIndex.from_tuples([('raw', c) for c in df.columns],
names=['datum', 'id'])
假设我想计算这组数据的 10 个周期移动平均值。我可以很容易地做到这一点
df['raw'].rolling(window=10, min_periods=10).mean()
我想将此分配给现有数据框的 新 部分。我希望语法简单:
df['avg_10'] = df['raw'].rolling(window=10, min_periods=10).mean()
但这不起作用。相反,为了得到等价物,我需要做一些笨拙的事情,比如:
a = df['raw'].rolling(window=10, min_periods=10).mean()
a.columns = pd.MultiIndex.from_tuples([('avg_10', c) for c in a.columns],
names=['datum', 'id'])
df = pd.concat([df, a], axis=1)
有没有简洁的方法来做到这一点?
【问题讨论】: