Pandas 中是否有一种方法可以在 dataframe.apply 中使用先前的行值,而先前的值也在应用程序中计算?

新手上路,请多包涵

我有以下数据框:

 Index_Date    A   B     C    D
================================
2015-01-31    10   10   Nan   10
2015-02-01     2    3   Nan   22
2015-02-02    10   60   Nan  280
2015-02-03    10  100   Nan  250

要求:

 Index_Date    A   B    C     D
================================
2015-01-31    10   10    10   10
2015-02-01     2    3    23   22
2015-02-02    10   60   290  280
2015-02-03    10  100  3000  250

Column C 用于 2015-01-31 value D

Then I need to use the value of C for 2015-01-31 and multiply by the value of A on 2015-02-01 并添加 B

我尝试使用 applyshift 使用 if else 给出了一个关键错误。

原文由 ctrl-alt-delete 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 311
2 个回答

首先,创建派生值:

 df.loc[0, 'C'] = df.loc[0, 'D']

然后遍历剩余的行并填充计算值:

 for i in range(1, len(df)):
    df.loc[i, 'C'] = df.loc[i-1, 'C'] * df.loc[i, 'A'] + df.loc[i, 'B']

  Index_Date   A   B    C    D
0 2015-01-31  10  10   10   10
1 2015-02-01   2   3   23   22
2 2015-02-02  10  60  290  280

原文由 Stefan 发布,翻译遵循 CC BY-SA 3.0 许可协议

给定一列数字:

 lst = []
cols = ['A']
for a in range(100, 105):
    lst.append([a])
df = pd.DataFrame(lst, columns=cols, index=range(5))
df

    A
0   100
1   101
2   102
3   103
4   104

您可以使用 shift 引用上一行:

 df['Change'] = df.A - df.A.shift(1)
df

    A   Change
0   100 NaN
1   101 1.0
2   102 1.0
3   103 1.0
4   104 1.0

df[‘Change’] = df.A - df.A.shift(1, fill_value=df.A[0]) # 填充缺失值例如100

去向

    A   Change
0   100 0.0
1   101 1.0
2   102 1.0
3   103 1.0
4   104 1.0

原文由 kztd 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题