如何在pandas数据帧中逐行执行

时间:2016-10-20 20:17:47

标签: python pandas dataframe row division

我有一个数据框,我希望根据条目执行除法。为了说明问题,请说我有以下数据框:

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 

我如何以系统的方式做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以将divshift列编辑:

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

答案 1 :(得分:1)

您可以使用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