【发布时间】:2018-07-09 10:17:43
【问题描述】:
我有一个 DataFrame,其列是 MultiIndex。 我想对列的一级进行分组并使用 apply 来执行转换。
目标:我希望使用 apply 传递给函数的 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
【问题讨论】:
-
只是列标题。 foo 函数打印数据框列,这对我来说是相关的部分。 sum 操作只是一个占位符,让函数运行。
-
想要的输出描述应该打印什么?为什么你只想打印 1,2 ,3, 4?那么0s呢?忽略它有什么用?
-
已编辑:希望现在更清晰
标签: python pandas pandas-groupby