Первое отличие определенных столбцов в обобщенном коде

#python #python-3.x #pandas #list #dataframe

#python #python-3.x #pandas #Список #фрейм данных

Вопрос:

 df   fruit   date              price   cost         var1   
0     apple    2017-01-01         2      2          20    
1     apple    2017-01-02         3      3          40 
2    banana    2017-01- 02        4      4          20 
2    banana    2017-01-02         4      4          10
  

Есть ли способ сгенерировать фрейм данных с первым отличием (fd_df), который сохраняет fruit, var1, date из df, но сначала отличает все остальные переменные от fruit? У меня есть 20 столбцов для первого различия (включая цену и себестоимость), поэтому нужен обобщенный код.

Комментарии:

1. можете ли вы добавить ожидаемый выходной код / фрейм данных? Что такое «первое отличие»?

Ответ №1:

IIUC, вы можете set_index сохранить столбец, который вы хотите, как есть, и использовать groupby.diff в fruit, а затем reset_index вернуть индекс в виде столбцов.

 df_ = (df.set_index(['fruit','date','var1'])
         .groupby(level='fruit').diff()
         .reset_index()
      )
print(df_)
    fruit        date  var1  price  cost
0   apple  2017-01-01    20    NaN   NaN
1   apple  2017-01-02    40    1.0   1.0
2  banana  2017-01-02    20    NaN   NaN
3  banana  2017-01-02    10    0.0   0.0