dataframe中如何实现为true的行之间的比较并动态赋值再与新值比较
只有在cond为true时,计算gg和dd
high low cond gg dd 0 19 17 False NaN NaN
1 15 12 False NaN NaN
2 18 13 True 19.0 12.0
3 67 56 False NaN NaN
4 46 33 True 67.0 13.0
5 86 78 True 86.0 33.0
6 31 15 False NaN NaN
7 74 42 True 86.0 15.0
8 53 46 False NaN NaN
9 23 11 True 74.0 11.0
我想实现:为true时,dd与上次为true时的gg做比较。
如果dd<上次的gg,则本次的dd和gg都改成上次的dd和gg
接着往下找到为true时的dd,再次对比dd和上次的gg,注意上次的gg已经改变。
回答:
dfhigh low cond gg dd
0 19 17 False NaN NaN
1 15 12 False NaN NaN
2 18 13 True 19.0 12.0
3 67 56 False NaN NaN
4 46 33 True 67.0 13.0
5 86 78 True 86.0 33.0
6 31 15 False NaN NaN
7 74 42 True 86.0 15.0
8 53 46 False NaN NaN
9 23 11 True 74.0 11.0
tem = df[df.cond].copy()
tem
high low cond gg dd
2 18 13 True 19.0 12.0
4 46 33 True 67.0 13.0
5 86 78 True 86.0 33.0
7 74 42 True 86.0 15.0
9 23 11 True 74.0 11.0
for idx, row in zip(tem.index[:-1], tem.iloc[1:].iterrows()):
if row[1]['dd'] < tem.loc[idx]['gg']:
tem.loc[row[0], ['gg', 'dd']] = tem.loc[idx]['gg']
df.loc[df.cond] = tem
df
high low cond gg dd
0 19 17 False NaN NaN
1 15 12 False NaN NaN
2 18 13 True 19.0 12.0
3 67 56 False NaN NaN
4 46 33 True 19.0 19.0
5 86 78 True 86.0 33.0
6 31 15 False NaN NaN
7 74 42 True 86.0 86.0
8 53 46 False NaN NaN
9 23 11 True 86.0 86.0
以上是 dataframe中如何实现为true的行之间的比较并动态赋值再与新值比较 的全部内容, 来源链接: utcz.com/p/938494.html