基本python:如何根据前一项创建列表中的下一项?

时间:2017-10-19 04:43:05

标签: python pandas

是否有更简单的方法来编写以下代码?目前代码正在运行,这很奇怪。它出了点问题......对于目标来说似乎太复杂了。我还收到一条SettingWithCopyWarning通知说:

  

正在尝试在DataFrame

的切片副本上设置值

目标是:我有四个时间序列/列 - a, b, c and d,其中d是需要填充的输出列。

  1. 如果a大于b,则在d列中返回1,
  2. 如果a低于c,则在d列中返回0,
  3. 如果a介于bc之间,则返回d列中的上一项。
  4. 请注意,最后一个if语句引用了d列中的上一个项目。

    data['d']=1
    data['previous_d']=1
    
    for i in range (len(data.a)):
        data.previous_d.iloc[i]=data.d.iloc[i-1]
        data.stance.iloc[i] = np.where((data.a.iloc[i]> data.b.iloc[i]),1,np.where((data.a.iloc[i]< data.c.iloc[i]),0,data.previous_d.iloc[i]))
    

1 个答案:

答案 0 :(得分:0)

只需要一些布尔索引就可以了

data.loc[data.a> data.b,'d'] = 1
data.loc[data.a < data.c,'d'] = 0
data.loc[(data.a < data.b) & (data.a > data.c),'d'] = data.d.shift(1)

或者,如果第三个条件意味着未填充数字之间的所有内容都是从上一个填充值中填充的,请使用

data.d.fillna(method='ffill',inplace=True)

而不是最后一行