【发布时间】:2017-10-21 00:58:36
【问题描述】:
正如标题所示,我希望能够做到以下几点(最好用一些代码来解释)[pandas 0.20.1 是强制性的]
import pandas as pd
import numpy as np
a = pd.DataFrame(np.random.rand(10, 4), columns=[['a','a','b','b'], ['alfa','beta','alfa','beta',]])
def as_is(x):
return x
def power_2(x):
return x**2
# desired result
a.transform([as_is, power_2])
问题是函数可能比这更复杂,因此我会失去“命名”功能,因为pandas.DataFrame.transform 只允许传递列表,而字典会最方便。
回到基础,我明白了:
dict_funct= {'as_is': as_is, 'power_2': power_2}
def wrapper(x):
return pd.concat({k: x.apply(v) for k,v in dict_funct.items()}, axis=1)
a.groupby(level=[0,1], axis=1).apply(wrapper)
但输出数据帧都是nan,大概是由于multi-index 列排序。有什么办法可以解决这个问题吗?
【问题讨论】:
-
“我会失去“命名”功能”是什么意思?您始终可以通过更改函数名称来重命名新列。您能否添加一个示例来说明问题所在?
标签: pandas multi-index pandas-groupby