为了账号安全,请及时绑定邮箱和手机立即绑定

尝试使用多行条件迭代pandas df

尝试使用多行条件迭代pandas df

千巷猫影 2021-12-17 16:56:50
提前道歉。我对python很陌生。我创建了一个用日期时间戳索引的pandas df。我想根据特定列和下一行中的同一列遍历所有具有条件的行。根据下面的示例,我想根据绝对值(例如 3)检查“Streak”列,然后检查下一行以查看 Streak 列是否变为负值。由于时间戳索引,我正在努力查看下一行。我已经尝试过.shift()无数次尝试使用loc和iloc以及Timedelta。他们对后者的问题是每行的时间戳之间没有一致的差异。我的 df 看起来像             Security      Difference     Buy/Sell     Streak  PriceDate 2019-02-25       2330           500.0            1          1  238.02019-02-26       2330           400.0            1          2  239.0     2019-02-27       2330           200.0            1          3  239.52019-03-05       2330          -600.0           -1         -1  233.02019-03-06       2330           190.0            1          1  234.0我尝试过但失败的代码是streaklength = 3for index, row in mergeddf.iterrows():    currentrow = mergeddf.index.get_loc(index)    If (mergeddf.iloc[currentrow,’Streak’] >= streaklength & (mergeddf.iloc[Currentrow + 1, ‘Streak’]) == -1:        Do something编辑 - 轮流输出我想获得原始行的“价格”列和固定行数后的列的价格价格并返回该比率。因此,对于固定行移动 n=2 的原始示例。我想返回一个变量 ouput1 (239.5) 和 ouput2 (234) 并返回 output1/output2 的比率
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

如果我正确理解了这个问题,那么您想要的是(df.Streak >= 3) & (df.Streak.shift(-1) < 0).


稍微更改您自己示例中的第一行以确保满足这两个条件,这给出了以下内容:


In [15]: df

Out[15]:

            Security  Difference  Buy/Sell  Streak  Price

Date

2019-02-25      2330       500.0         1       3  238.0

2019-02-26      2330       400.0         1       2  239.0

2019-02-27      2330       200.0         1       3  239.5

2019-03-05      2330      -600.0        -1      -1  233.0

2019-03-06      2330       190.0         1       1  234.0


In [16]: (df.Streak >= 3) & (df.Streak.shift(-1) < 0)

Out[16]:

Date

2019-02-25    False

2019-02-26    False

2019-02-27     True

2019-03-05    False

2019-03-06    False

Name: Streak, dtype: bool

要回答编辑过的问题,您可以使用此掩码获取相关输出:


mask = (df.Streak >= 3) & (df.Streak.shift(-1) < 0)

df['Output1'] = df[mask].Price

df['Output2'] = df[mask].Price / df.shift(-2)[mask].Price

结果如下:


In [139]: df

Out[139]:

            Security  Difference  Buy/Sell  Streak  Price  Output1   Output2

Date

2019-02-25      2330       500.0         1       3  238.0      NaN       NaN

2019-02-26      2330       400.0         1       2  239.0      NaN       NaN

2019-02-27      2330       200.0         1       3  239.5    239.5  1.023504

2019-03-05      2330      -600.0        -1      -1  233.0      NaN       NaN

2019-03-06      2330       190.0         1       1  234.0      NaN       NaN


查看完整回答
反对 回复 2021-12-17
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信