gpt4 book ai didi

python - 如何在 Dataframe 的行级别应用计算?

转载 作者:行者123 更新时间:2023-12-05 06:18:16 25 4
gpt4 key购买 nike

我正在尝试根据两列预测数据框中的值,但添加前一行的小数位。仅当当前行的存储与前一行相同时才需要发生这种情况。

例如,我希望此数据集的第 2 行预测 Forecast: 9 * Lag: 0.2 + residue(from row 1): 0.7 = 2.5

虽然第 3 行仍应计算 Forecast: 6 * Lag: 1.2 = 7.2(因为商店代码不再是 100)

实现此目标的最佳方法是什么?非常感谢。

import pandas as pd
import numpy as np

data = [{'store':100, 'Forecast':11, 'Lag':0.7}
, {'store':100,'Forecast':9, 'Lag':0.2}
, {'store':200,'Forecast':6, 'Lag':1.2}]

df = pd.DataFrame(data)

df['predict']= df['Forecast'] * df['Lag']
df['residue']= df['predict'] - np.fix(df['predict'])

最佳答案

尝试使用 pandas.DataFrame.shift创建具有移位值的列。

df['store_prev'] = df.store.shift(1)
df['lag_prev'] = df.lag.shift(1)

store forecast lag store_prev lag_prev
0 100 11 0.7 NaN NaN
1 100 9 0.2 100.0 0.7
2 200 6 1.2 100.0 0.2

然后你可以apply每行的函数和drop之前创建的临时列。

df['predict'] = df.apply(lambda row: row.forecast * row.lag + row.lag_prev
if row.store == row.store_prev
else row.forecast * row.lag, axis=1)
df.drop(columns=['store_prev', 'lag_prev'])

store forecast lag predict
0 100 11 0.7 7.7
1 100 9 0.2 2.5
2 200 6 1.2 7.2

关于python - 如何在 Dataframe 的行级别应用计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61301617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com