我使用的資料看起來像這樣
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]
如果我有更多的年份和/或更多的變數,有沒有辦法提高效率?
uj5u.com熱心網友回復:
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):。在這種情況下,它會跳過主題列并在最后兩個值之前停止。也就是說,您需要知道在哪里停止它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495362.html
上一篇:使用canvasHtml&JavaScript繪制六邊形網格
下一篇:線交點的共面矩形段面積
