dataframe中如何实现为true的行之间的比较并动态赋值再与新值比较

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已经改变。


回答:

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 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

回到顶部