簡體   English   中英

遍歷熊貓數據幀連續的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM