如何在不使用列名的情况下对熊猫的多列执行操作?
我有一个带有大量列的数据集。我想对所有这些列执行一般计算,并获得最终值,并将其作为新列应用。
例如,我有一个类似于下面的数据框架,
A1 A2 A3 ... A120
0 0.12 0.03 0.43 ... 0.56
1 0.24 0.53 0.01 ... 0.98
. ... ... ... ... ...
200 0.11 0.22 0.31 ... 0.08
我想使用新的列计算构建类似于下面的数据框架。
calc = (A1**2 - A1) + (A2**2 - A2) ... (A120**2 - A120)
最终的数据框应该是这样,
A1 A2 A3 ... A120 calc
0 0.12 0.03 0.43 ... 0.56 x
1 0.24 0.53 0.01 ... 0.98 y
. ... ... ... ... ... ...
200 0.11 0.22 0.31 ... 0.08 n
我尝试使用以下python进行此操作,
import pandas as pd
df = pd.read_csv('sample.csv')
def construct_matrix():
temp_sumsqc = 0
for i in range(len(df.columns)):
column_name_construct = 'A'+f'{i}'
temp_sumsqc += df[column_name_construct] ** 2 - (df[column_name_construct])
df["sumsqc"] = temp_sumsqc
matrix_constructor()
print(df_read.to_string())
但这会引发 keyError:'a1
很难做 df [“ a1”] ** 2- df [“ a1”] + df [“ a2”] ** 2 -df [“ a2”] + ...
,因为有120列。
由于我尝试的方式无法正常工作,我想知道是否有更好的方法可以做到这一点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
无需用于循环,我们可以在此处使用矢量化方法
No need to use for loop, we can use vectorized approach here
您可以使用
df.apply
来执行每列的代码,然后使用sum(axis = 1)
将结果值跨列总和:输出:
请注意,
a1 ** 2 -a1
等效于a1*(a1-1)
,因此您可以执行You can use
df.apply
to execute code for each column, and then usesum(axis=1)
to sum the resulting values across columns:Output:
Note that
A1**2 - A1
is equivalent toA1 * (A1 - 1)
, so you could do