计算 Python Dataframe 中的多列增长

菜鸟

我使用的数据看起来像这样

data

Subject    2000_X1    2000_X2   2001_X1    2001_X2    2002_X1    2002_X2
1              100         50       120         45        110         50
2               95         40       100         45        105         50
3              110         45       100         45        110         40

我想计算每年的每个变量增长,所以结果看起来像这样

Subject    2001_X1_gro      2001_X2_gro      2002_X1_gro      2002_X2_gro
1                  0.2             -0.1         -0.08333          0.11111
2             0.052632            0.125             0.05          0.11111
3             -0.09091                0              0.1         -0.11111

我已经使用这样的代码为每年的每个变量手动执行此操作

data[2001_X1_gro]= (data[2001_X1]-data[2000_X1])/data[2000_X1]
data[2002_X1_gro]= (data[2002_X1]-data[2001_X1])/data[2001_X1]
data[2001_X2_gro]= (data[2001_X2]-data[2000_X2])/data[2000_X2]
data[2002_X2_gro]= (data[2002_X2]-data[2001_X2])/data[2001_X2]

如果我有更多的年份和/或更多的变量,有没有办法提高效率?

询问者
import pandas as pd

df = pd.read_csv('data.txt', sep=',', header=0)

输入

   Subject  2000_X1  2000_X2  2001_X1  2001_X2  2002_X1  2002_X2
0        1      100       50      120       45      110       50
1        2       95       40      100       45      105       50
2        3      110       45      100       45      110       40

接下来,创建一个循环并填充列:

qqq = '_gro'
new_name = ''
year = ''
for i in range(1, len(df.columns) - 2):
    year = str(int(df.columns[i][:4]) + 1) + df.columns[i][4:]
    new_name = year + qqq
    df[new_name] = (df[year] - df[df.columns[i]])/df[df.columns[i]]

print(df)

输出

   Subject  2000_X1  2000_X2  2001_X1  2001_X2  2002_X1  2002_X2  2001_X1_gro  \
0        1      100       50      120       45      110       50     0.200000   
1        2       95       40      100       45      105       50     0.052632   
2        3      110       45      100       45      110       40    -0.090909   

   2001_X2_gro  2002_X1_gro  2002_X2_gro  
0       -0.100    -0.083333     0.111111  
1        0.125     0.050000     0.111111  
2        0.000     0.100000    -0.111111  

在循环中,从列名中提取年份,转换为 int,并在其中添加 1。该值再次转换为字符串,添加了前缀“_Xn”。创建了一个 new_name 变量,其中还附加了字符串 '_gro '。将创建一列并用计算值填充。

如果你想计算,例如三年,那么你需要添加的不是1,而是3。这是在你的数据将被排序的条件下。请注意,循环不会遍历所有元素:for i in range(1, len(df.columns) - 2):。在这种情况下,它会跳过主题列并在最后两个值之前停止。也就是说,您需要知道在哪里停止它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章