[英]iterate through pandas dataframe consecutive columns
我試圖在熊貓中創建一個循環,以計算連續列之間的差異,並在新列中提供輸出:
原始df:
**201601** **201602** **201603**
100 200 500
所需的輸出
**201601** **201602** **201603** **201602_201601** **201603_02**
100 200 500 100 300
我的代碼是我從stackoverflow帖子修改的([ 將列添加到由python中的for循環計算的數據幀中 ):
for i in df.iloc[:,2:5]:
for j in df.iloc[:,2:5]:
if i == j:
break
else:
bina = df[i]-df[j]
df['MOM_' + str(j) + '_' + str(i)] = bina
df.head()
但是,我得到的輸出如下:
**201601** **201602** **201603** **201602_201601** **201603_201601** **201603_201602**
100 200 500 100 400 300
我已經使用pd.diff來完成我需要的操作,但無法找出for循環代碼。 任何幫助將不勝感激。
謝謝
使用diff
和帶有zip
簡單列表理解來構造列的名稱。
cols = [f'{b}_{a}' for (a,b) in zip(df.columns, df.columns[1:])]
df[cols] = df.diff(axis=1).dropna(axis=1)
201601 201602 201603 201602_201601 201603_201602
0 100 200 500 100 300
避免在使用熊貓時始終使用for
循環
這只是修復您的代碼
col=df.columns
for x,i in enumerate(col):
for y,j in enumerate(col):
if y-x==1 and i!=j:
bina = df[i]-df[j]
df['MOM_' + str(j) + '_' + str(i)] = bina
df.columns
Out[1210]:
Index(['**201601**', '**201602**', '**201603**', 'MOM_**201602**_**201601**',
'MOM_**201603**_**201602**'],
dtype='object')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.