pandas 在上一列的基础上添加新费率列

gmxoilav  于 2023-09-29  发布在  其他
关注(0)|答案(3)|浏览(129)

我想在当前行之前添加一个基于行的速率列,就像diff()一样,但需要做一些计算,如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random((5,2)),columns=['v1','v2'])
print(df)

rate = []
rate.append(0)
prev = 0
for index, row in df.iterrows():
    if index == 0:
        prev = row
        continue
            
    r = (prev['v2'] - row['v2'])/(row['v1'] - prev['v1'])
    prev = row
    rate.append(r)
        
df['rate'] = rate

print(df)

当前的逻辑工作,在python中有什么更好的方法吗?

btxsgosb

btxsgosb1#

也许有更好的方法,但试试看:

df['rate'] = df['v2'].diff().div(df['v1'].diff()).mul(-1).fillna(0)
iszxjhcz

iszxjhcz2#

这将基于前一行索引计算速率,并在发生时将Nan设置为0(零)

df['rate']=((df['v2'].shift(1)-df['v2'])/(df['v1']-df['v1'].shift(1))).fillna(0)

关于shift函数的更多信息。

ia2d9nvy

ia2d9nvy3#

您可以使用pandas shift函数。

df['rate'] = (df['v2'] - df['v2'].shift(1)) / (df['v1'].shift(1) - df['v1'])
df['rate'].iloc[0] = 0
df['rate'] = df['rate'].fillna(0)

shift()方法用于将数据移动一行,这允许您使用向量化操作轻松计算当前行和前一行之间的差异。
然后使用.iloc[0]方法将第一行的速率设置为0。

相关问题