在pandas中,如何对返回两列的每一列应用函数
我想对分组的多索引数据帧的每一列应用一个函数 如果我有一个返回标量的函数在pandas中,如何对返回两列的每一列应用函数,pandas,pandas-groupby,Pandas,Pandas Groupby,我想对分组的多索引数据帧的每一列应用一个函数 如果我有一个返回标量的函数my_function(),我会使用 data_grouped = data.groupby(['type']) data_transf = data_grouped.apply(lambda x: my_function(x)) 但是,考虑另一个函数 MyOffice函数()/代码>将一个数组(所有 N< /代码>一组内的行)作为输入,并返回一个 n x 2 < /COD>数组作为输出。p> 如何将其应用于分组数据框的每
my_function()
,我会使用
data_grouped = data.groupby(['type'])
data_transf = data_grouped.apply(lambda x: my_function(x))
但是,考虑另一个函数<代码> MyOffice函数()/代码>将一个数组(所有<代码> N< /代码>一组内的行)作为输入,并返回一个<代码> n x 2 < /COD>数组作为输出。p> 如何将其应用于分组数据框的每一列?也就是说,我想获取
m
行的分组数据的每一列,并用myu function\u array()
的nx2
输出替换它
下面是一些示例数据。还有其他组(类型),但我只显示一个
type frame x y
F1675 1 77.369027 108.013249
2 107.784096 22.177883
3 22.385162 65.024619
4 65.152003 77.74970
def my_function_array(data_vec, D=2, T=2):
N = len(data_vec) - (D-1)*T # length of embedded signal
embed_data = np.zeros([N,D])
for di in range(-D//2,D//2):
embed_data[:,di] = data_vec[ np.arange((D//2+di)*T, N+(D//2+di)*T) ]
return embed_data
将函数应用到第二列y
my_function_array(np.array([108.013249, 22.177883, 65.024619, 77.74970]))
我有
array([[ 65.024619, 108.013249],
[ 77.7497 , 22.177883]])
因此,预期的输出是
type frame x_1 x_2 y_1 y_2
F1675 1 22.385162 77.369027 65.024619 108.013249
2 65.152003 107.784096 77.7497 22.177883
其中
x_1
和x_2
是由x
产生的两列(命名不重要,可以是任何内容)。请注意,这些组变得越来越短,越来越宽 我想您需要返回pd.DataFrame
:
def my_function_array(data_vec, D=2, T=2):
# print (data_vec.name)
N = len(data_vec) - (D-1)*T # length of embedded signal
embed_data = np.zeros([N,D])
for di in range(-D//2,D//2):
embed_data[:,di] = data_vec[ np.arange((D//2+di)*T, N+(D//2+di)*T) ]
return pd.DataFrame(embed_data).add_prefix(data_vec.name)
f = lambda x: pd.concat([my_function_array(x[y]) for y in x], axis=1)
data_transf = data.groupby(['type']).apply(f)
print (data_transf)
x0 x1 y0 y1
type
F1675 0 22.385162 77.369027 65.024619 108.013249
1 65.152003 107.784096 77.749700 22.177883
是否可以添加一些示例数据、示例函数和预期输出?您好@jezrael,请查看我的扩展问题!谢谢非常接近!如何将其应用于数据帧的每一列?