我有一个DataFrame,其列是MultiIndex。 我想分组列的一个级别并使用apply来执行转换。
目标:我希望使用apply not 传递给函数的DataFrame在索引中具有groupby的键。
从docs看起来这就是group_keys
正在做的事情,但似乎没有效果:
import numpy as np
import pandas as pd
data = {'A': pd.DataFrame(np.random.randn(100, 5)),
'B': pd.DataFrame(np.random.randn(100, 5)),
'C': pd.DataFrame(np.random.randn(100, 5))}
data = pd.concat(data, axis=1, names=['feat_1', 'feat_2'])
def foo(df):
print(df.columns)
return df.sum(1)
我的尝试:
result = data.groupby(level=['feat_1'], axis=1, group_keys=False).apply(foo)
这是在屏幕上打印的内容:
MultiIndex(levels=[['A', 'B', 'C'], [0, 1, 2, 3, 4]],
labels=[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4]],
names=['feat_1', 'feat_2'])
MultiIndex(levels=[['A', 'B', 'C'], [0, 1, 2, 3, 4]],
labels=[[1, 1, 1, 1, 1], [0, 1, 2, 3, 4]],
names=['feat_1', 'feat_2'])
MultiIndex(levels=[['A', 'B', 'C'], [0, 1, 2, 3, 4]],
labels=[[2, 2, 2, 2, 2], [0, 1, 2, 3, 4]],
names=['feat_1', 'feat_2'])
所需的打印输出:我希望函数foo
能够接收仅包含feat_2
列的数据框,因为我使用的是group_keys=False
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
我遗漏了文档中的内容吗?或者我如何实现我想要的(可能没有修改函数foo)?
注意:我在Python 3上使用pandas 0.20.3
答案 0 :(得分:0)
而不是分组,如何:
for feat1 in data.columns.levels[0]:
print(list(data.columns.levels[1]))
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]