我有一个熊猫数据框,其中 N 列表示向量的坐标(例如 X、Y、Z,但可能超过 3D)。
我想使用组合列的任意函数沿行聚合数据框,例如 norm: (X^2 + Y^2 + Y^2)
。
我想做一些类似于这里、这里和这里所做的事情,但我想让它保持足够的通用性,以便列数可以改变并且它的行为就像
DataFrame.mean(axis = 1)
或者
DataFrame.sum(axis = 1)
我找到了比@elyase 建议的更快的解决方案:
np.sqrt(np.square(df).sum(axis=1))
Numpy 提供规范... 使用:
np.linalg.norm(df[['X','Y','Z']].values,axis=1)
一行,使用你想要的任何函数(包括 lambda 函数),例如
df.apply(np.linalg.norm, axis=1)
或者
df.apply(lambda x: (x**2).sum()**.5, axis=1)
按名称过滤列
cols = ['X','Y','Z']
df[cols].mean(axis=1)
df[cols].sum(axis=1)
df[cols].apply(lambda values: sum([v**2 for v in values]), axis=1)
您正在寻找申请。您的示例如下所示:
>> df = pd.DataFrame([[1, 1, 0], [1, 0, 0]], columns=['X', 'Y', 'Z'])
X Y Z
0 1 1 0
1 1 0 0
>>> df.apply(lambda x: np.sqrt(x.dot(x)), axis=1)
0 1.414214
1 1.000000
dtype: float64
这适用于任意数量的维度。