我经常需要调用 groupby().apply()。由于 apply() 的回调函数只允许返回一个系列或数据帧(或者可能是一个标量),如果我的回调函数需要返回一个一维和二维数组的元组,那将变得相当尴尬,因为我会有将它们打包到 DataFrame 中,然后在我从 apply() 获得结果后解压到数组中。
例子:
def my_callback(g):
"""This function takes the group g and calculates a two dim array and a
one dim array"""
a = np.ones(len(g),2)
b = np.ones(len(g))
#I need to return a and b
return a, b #this won't work
x = data.groupby('key').apply(my_callback)
有人有什么建议吗?如果 pandas 允许更灵活的回调返回值,那将更加方便。
现在来看几个用例,这里有几个例子: 案例 1:我需要将 DataFrame 转换为回归的自变量和因变量。转换涉及逐组生成 2D 数组和 1D 数组,然后将每个组中的数组行堆叠在一起。如果我能写就太好了:
X, Y = data.groupby('key').apply(my_callback)
使用 DataFrame 的作品,但它涉及 np.column_stack()。
案例2:我想将DataFrame逐组转换为两个不同行和列的数组。我认为今天没有任何方法可以做到这一点,除非我们将所有内容编码为 1D 系列。