Как выполнить деление по строкам во фрейме данных pandas

#python #pandas #dataframe #row #division

#python #панды #фрейм данных #строка #деление #pandas

Вопрос:

У меня есть фрейм данных, в котором я хотел бы выполнить деление на основе записей. Чтобы проиллюстрировать проблему, допустим, у меня есть следующий фрейм данных:

 import pandas as pd

df= pd.DataFrame([[1.,2.,3.,4.], [5.,6.,7.,8.], [9.,10.,11.,12.]],
                  columns=['A','B','C','D'], index=['x','y','z'])
  

Итак, я получаю следующее как df :

    A   B   C   D
x  1   2   3   4
y  5   6   7   8
z  9  10  11  12
  

Что я хотел бы сделать, так это посмотреть, насколько изменилось каждое значение в столбце D по мере того, как я переходил от x к y и снова к z .

Фрейм данных, который я бы получил, был бы:

    A   B   C    D
x  1   2   3  NaN
y  5   6   7  2.0
z  9  10  11  1.5 
  

Как мне сделать это систематическим образом?

Ответ №1:

Вы можете использовать div со столбцом shift ed:

 In [21]:
df['D'] = df['D'].div(df['D'].shift())
df

Out[21]:
   A   B   C    D
x  1   2   3  NaN
y  5   6   7  2.0
z  9  10  11  1.5
  

Или более кратко:

 In [23]:
df['D'] /= df['D'].shift()
df

Out[23]:
   A   B   C    D
x  1   2   3  NaN
y  5   6   7  2.0
z  9  10  11  1.5
  

Ответ №2:

вы можете использовать pct_change():

 In [57]: df.D.pct_change()   1
Out[57]:
x    NaN
y    2.0
z    1.5
Name: D, dtype: float64
  

или как DF (на лету):

 In [58]: df.assign(D=df.D.pct_change()   1)
Out[58]:
     A     B     C    D
x  1.0   2.0   3.0  NaN
y  5.0   6.0   7.0  2.0
z  9.0  10.0  11.0  1.5