перебирать последовательные столбцы панд данных - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать цикл в пандах, чтобы вычислить разницу между последовательными столбцами и выдать вывод в новом столбце:

Оригинал df:

**201601** **201602** **201603**  
100           200         500

Требуемый вывод

**201601** **201602** **201603**  **201602_201601** **201603_02**
100           200         500         100          300

Мой код, который я изменил из сообщения stackoverflow ([ добавить столбцы к фрейму данных, вычисленному для циклов в python ):

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.Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Это просто исправьте ваш код

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')
0 голосов
/ 07 декабря 2018

Использование 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 при использовании панд

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...