Скажем, у меня есть данные в DataFrame df
. В частности, df.columns
- это MultiIndex, где первый уровень указывает «какие данные» мы имеем дело, а второй уровень указывает какой-то идентификатор. Начнем с того, есть только одно уникальное значение во внешнем уровне столбцов:Присвоить * new * подмножество pandas DataFrame
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)
Есть краткий способ сделать это?
@ 8one6, помогло? – MaxU