【问题标题】:How to use Lag value of a column in condition to populate another column in Pandas如何在条件中使用列的滞后值填充 Pandas 中的另一列
【发布时间】:2021-03-18 21:41:25
【问题描述】:

我有一张如下表:

我想用以下逻辑创建另一列(Check2):

  • 如果 Check1 ==0 那么 Check2 = A
  • Else Check2 = Check2(滞后值) - B(滞后) - C(滞后)

预期输出应如下所示 -

我已经写了下面的代码,但是对于 50000 条记录需要很长时间(以小时为单位),请帮助

for i in range(len(df)): 
            if df.loc[i,'Check1'] == 0:
                df.loc[i,'Check2'] = df.loc[i,'Volume']
            else:
                df.loc[i,'Check2'] = df.loc[i-1,'Check2'] - df.loc[i-1,'B'] -df.loc[i-1,'C']

【问题讨论】:

  • 你能弄清楚Check2(lagged value) - B - C的结果是104吗?
  • @toRex, B 和 C 也是滞后值.. 现在编辑..

标签: python pandas performance time lag


【解决方案1】:

您正在搜索:.shift() 函数。 它做你想做的事

【讨论】:

  • 你能告诉我如何在我的逻辑中使用 shift,因为我不想滞后整个列我想在使用滞后时进行计算。我是 python 新手,我的 for 循环需要 3 个小时才能记录 100,000 条记录。
  • 首先 .loc 读取标量值不是最好的解决方案,尝试使用 .at 这会给你一个很好的改进,无论如何我建议你考虑一个矢量解决方案。 ``` # 这用于实际掩码 = df['Check1'] == 0 df['Check2'][mask] = df['Volume'] # 这用于滞后 df['Check2'][~ mask] = df[Check2'].shift(-1)[~mask] - df['B'].shift(-1)[~mask] - df['C'].shift(-1)[~ mask] ``` 这可以使用 np.where 以更好的方式编写
猜你喜欢
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2016-08-01
  • 1970-01-01
  • 2020-09-10
  • 2020-07-30
相关资源
最近更新 更多