【发布时间】:2020-01-04 23:54:39
【问题描述】:
我有一个多索引数据框(索引有 2 个级别)和我的变量作为列。
我正在尝试为每个一级索引应用一个函数。这个想法只是对数据本身进行滚动标准化:
from sklearn.preprocessing import robust_scale, power_transform
df[list_feat_num] = df[list_feat_num].groupby(level='date').apply(lambda x: power_transform(x))
并得到以下错误:
ValueError: Must have equal len keys and value when setting with an iterable
重现示例:
import numpy as np
iterable = [[1,2,3,4],['a','b','d','e','f','g','h']]
idx = pd.MultiIndex.from_product(iterable, names=['date', 'sub'])
df = pd.DataFrame(np.random.randn(28, 4), index =idx, columns=['var1', 'var2', 'var3', 'var4'])
df[['var1', 'var2']] = df[['var1', 'var2']].groupby(level='date').apply(lambda x: power_transform(x, method='yeo-johnson' ))
经过调查,该函数已正确应用,但一切都返回到 Serie,而不是返回到多索引数据帧。因此错误,因为它无法分配回原始数据帧。
我能做什么?是否与广播参数有关?
非常感谢
【问题讨论】:
-
好的,我正在更新我的帖子
-
更新了可重现的示例
标签: python-3.x pandas scikit-learn pandas-groupby