#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