23

我有一个熊猫数据框,其中 N 列表示向量的坐标(例如 X、Y、Z,但可能超过 3D)。

我想使用组合列的任意函数沿行聚合数据框,例如 norm: (X^2 + Y^2 + Y^2)

我想做一些类似于这里、这里和这里所做的事情想让保持足够的通用性,以便列数可以改变并且它的行为就像

DataFrame.mean(axis = 1)

或者

DataFrame.sum(axis = 1)
4

5 回答 5

27

我找到了比@elyase 建议的更快的解决方案:

np.sqrt(np.square(df).sum(axis=1))
于 2014-02-05T22:10:37.183 回答
10

Numpy 提供规范... 使用:

np.linalg.norm(df[['X','Y','Z']].values,axis=1)
于 2016-11-22T13:00:20.687 回答
6

一行,使用你想要的任何函数(包括 lambda 函数),例如

df.apply(np.linalg.norm, axis=1)

或者

df.apply(lambda x: (x**2).sum()**.5, axis=1)

于 2019-01-17T04:48:18.657 回答
3

按名称过滤列

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)
于 2013-08-30T02:48:14.873 回答
2

您正在寻找申请。您的示例如下所示:

>> 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

这适用于任意数量的维度。

于 2013-08-30T02:52:18.740 回答