gpt4 book ai didi

python - 使用 pandas 在 Python 中计算新列

转载 作者:行者123 更新时间:2023-12-01 02:59:08 24 4
gpt4 key购买 nike

我想对 pandas 数据框应用简单的操作来获取每行的百分比变化。我有这样的数据

colA    colB    colC    colD
39.5 41 41.5 40.5
15.5 17 17.5 16.5
21.5 23 23.5 22.5
40.5 42 42.5 41.5
9.5 11 11.5 10.5
26.5 28 28.5 27.5

我的代码

import pandas as pd
import numpy as np

df = pd.read_csv('data.csv')
print(((df.colA/ np.mean(df.iloc[:,2:], axis=1))-1)*100)

df['change'] = df.apply(lambda x: (((x.colA/ np.mean(x.iloc[:,2:], axis=1))-1)*100))

当我打印结果时,它给出了我想要的结果,但是当我执行 df.apply 来创建列时,它给出了以下错误

Traceback (most recent call last):
File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:4279)
File "pandas\src\hashtable_class_helper.pxi", line 404, in pandas.hashtable.Int64HashTable.get_item (pandas\hashtable.c:8543)
TypeError: an integer is required

有什么建议吗?我哪里做错了?

最佳答案

函数的输出是 Series ,其索引与 df 相同,因此只需将其分配给新列即可:

df['change'] = (((df.colA/ np.mean(df.iloc[:,2:], axis=1))-1)*100)
print (df)
colA colB colC colD change
0 39.5 41 41.5 40.5 -3.658537
1 15.5 17 17.5 16.5 -8.823529
2 21.5 23 23.5 22.5 -6.521739
3 40.5 42 42.5 41.5 -3.571429
4 9.5 11 11.5 10.5 -13.636364
5 26.5 28 28.5 27.5 -5.357143

或者使用assign :

df = df.assign(change=(((df.colA/ np.mean(df.iloc[:,2:], axis=1))-1)*100))
print (df)
colA colB colC colD change
0 39.5 41 41.5 40.5 -3.658537
1 15.5 17 17.5 16.5 -8.823529
2 21.5 23 23.5 22.5 -6.521739
3 40.5 42 42.5 41.5 -3.571429
4 9.5 11 11.5 10.5 -13.636364
5 26.5 28 28.5 27.5 -5.357143

也可以仅使用 pandas 函数 - div + iloc + mean + sub + mul :

df['change'] = df.colA.div(df.iloc[:,2:].mean(1)).sub(1).mul(100)
print (df)
colA colB colC colD change
0 39.5 41 41.5 40.5 -3.658537
1 15.5 17 17.5 16.5 -8.823529
2 21.5 23 23.5 22.5 -6.521739
3 40.5 42 42.5 41.5 -3.571429
4 9.5 11 11.5 10.5 -13.636364
5 26.5 28 28.5 27.5 -5.357143

关于python - 使用 pandas 在 Python 中计算新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43979649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com