python – 将函数应用于pandas中的列集,以列方式“循环”整个数据框

python – 将函数应用于pandas中的列集,以列方式“循环”整个数据框,第1张

概述这是一个测试示例,以显示我想要实现的目标.这是一个玩具数据框: df = pd.DataFrame(np.random.randn(10,7),index=range(1,11),columns=headers) 这使 Time A_x A_y A_z B_x B_y B_z1 -0.075509 -0.123527 -0 这是一个测试示例,以显示我想要实现的目标.这是一个玩具数据框:

df = pd.DataFrame(np.random.randn(10,7),index=range(1,11),columns=headers)

这使

Time       A_x       A_y       A_z       B_x       B_y       B_z1  -0.075509 -0.123527 -0.547239 -0.453707 -0.969796  0.248761  1.3696132  -0.206369 -0.112098 -1.122609  0.218538 -0.878985  0.566872 -1.0488623  -0.194552  0.818276 -1.563931  0.097377  1.641384 -0.766217 -1.4820964   0.502731  0.766515 -0.650482 -0.087203 -0.089075  0.443969  0.3547475   1.411380 -2.419204 -0.882383  0.005204 -0.204358 -0.999242 -0.3952366   1.036695  1.115630  0.081825 -1.038442  0.515798 -0.060016  2.6697027   0.392943  0.226386  0.039879  0.732611 -0.073447  1.164285  1.0343578  -1.253264  0.389148  0.158289  0.440282 -1.195860  0.872064  0.9063779  -0.133580 -0.308314 -0.839347 -0.517989  0.652120  0.477232 -0.39176710  0.623841  0.473552  0.059428  0.726088 -0.593291 -3.186297 -0.846863

我想要做的只是在这种情况下,为每个索引计算每个标题(A和B)的向量长度,并除以时间列.因此,该函数需要是np.sqrt(A_x ^ 2 A_y ^ 2 A_z ^ 2),当然对于B也是如此.即我希望计算每一行的速度,但三列有助于一个速度结果.

我已经尝试使用df.groupby和df.filter来循环遍历列,但我无法让它工作,因为我完全不确定如何将相同的函数有效地应用于数据框的块,所有这些都在一个去(显然一个是避免在行上循环).我试过了

df = df.apply(lambda x: np.sqrt(x.dot(x)),axis=1)

这当然有效,但是只有当输入数据框具有正确的列数(3)时,如果更长,那么在整个行上计算点积,而不是在我想要的三列的块中(因为这是转弯对应于标签坐标,这是三维的).

所以这就是我最终试图用上面的例子得到的(下面的数组只是填充了随机数,而不是我想要计算的实际速度 – 只是为了显示我想要实现的形状):

VeLocity_A  VeLocity_B1    -0.975633   -2.6695442     0.766405   -0.2649043     0.425481   -0.4298944    -0.437316    0.9540065     1.073352   -1.4759646    -0.647534    0.9370357     0.082517    0.4381128    -0.387111   -1.4179309    -0.111011    1.06853010    0.451979   -0.053333

我的实际数据是50,000 x 36(因此有12个带有x,y,z坐标的标签),我想一次性计算速度以避免迭代(如果可能的话).还有一个相同长度的时间列(50,000×1).

你怎么做到这一点?

谢谢,阿斯特丽德

解决方法 一个可能的开始.

过滤掉与特定向量对应的列名.例如

In [20]: filter(lambda x: x.startswith("A_"),df.columns)Out[20]: ['A_x','A_y','A_z']

从DataFrame中选择这些列

In [22]: df[filter(lambda x: x.startswith("A_"),df.columns)]Out[22]:          A_x       A_y       A_z1  -0.123527 -0.547239 -0.4537072  -0.112098 -1.122609  0.2185383   0.818276 -1.563931  0.0973774   0.766515 -0.650482 -0.0872035  -2.419204 -0.882383  0.0052046   1.115630  0.081825 -1.0384427   0.226386  0.039879  0.7326118   0.389148  0.158289  0.4402829  -0.308314 -0.839347 -0.51798910  0.473552  0.059428  0.726088

因此,使用此技术,您可以获得3列的块.例如.

column_initials = ["A","B"]for column_initial in column_initials:    df["VeLocity_"+column_initial]=df[filter(lambda x: x.startswith(column_initial+"_"),df.columns)].apply(lambda x: np.sqrt(x.dot(x)),axis=1)/df.TimeIn [32]: df[['VeLocity_A','VeLocity_B']]Out[32]:     VeLocity_A  VeLocity_B1    -9.555311  -22.4679652    -5.568487   -7.1776253    -9.086257  -12.0300914     2.007230    1.1442085     1.824531    0.7750066     1.472305    2.6234677     1.954044    3.9677968    -0.485576   -1.3848159    -7.736036   -6.72293110    1.392823    5.369757

我没有得到与你相同的答案.但是,我借用你的df.apply(lambda x:np.sqrt(x.dot(x)),axis = 1)并假设它是正确的.

希望这可以帮助.

总结

以上是内存溢出为你收集整理的python – 将函数应用于pandas中的列集,以列方式“循环”整个数据框全部内容,希望文章能够帮你解决python – 将函数应用于pandas中的列集,以列方式“循环”整个数据框所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1193008.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存