Последовательные различия в соседних столбцах для каждой группы - PullRequest
1 голос
/ 10 апреля 2019

У меня есть файл с несколькими столбцами. Для простоты ниже показаны первые три группы (А1, А2 и А3):

Column1 Column2 Column3 
A1      45      50      
A1      70      90      
A1      100     150
A2      500     510     
A2      550     600
A3      1000    1100

Я хочу получить последовательное отличие от двух последних столбцов для каждой группы в отдельности. И среднее из этих последовательных различий на группу.

Ожидаемый результат будет:

Column1 Column2 Column3 Column4        Column5
A1      45      50      70-50 = 20
A1      70      90      100-90 = 10    15  
A1      100     150
A2      500     510     550-510 = 40
A2      550     600
A3      1000    1100

Здесь я сохраняю данные в фрейме данных и пытаюсь получить ожидаемый результат.

Мой код выглядит так:

df[output]= ([((float(df['Column3']) - float(df['Column2'].shift(-1)))*-1)/float(len(report_map1[i]))])

Мне интересно, есть ли какой-нибудь более простой способ получить ожидаемый результат?

1 Ответ

1 голос
/ 10 апреля 2019

Используйте DataFrameGroupBy.shift со столбцом вычитания Column3:

df['Column4'] =  df.groupby('Column1')['Column2'].shift(-1) - df['Column3']
#if necessary convert to floats
#df['Column4'] =  (df.groupby('Column1')['Column2'].shift(-1).astype(float) - 
#                  df['Column3'].astype(float))
print (df)
  Column1  Column2  Column3  Column4
0      A1       45       50     20.0
1      A1       70       90     10.0
2      A1      100      150      NaN
3      A2      500      510     40.0
4      A2      550      600      NaN
5      A3     1000     1100      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...