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

junyu_sun
  • 5
新手上路,请多包涵

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

回复
阅读 570
1 个回答
老瓜
  • 481
✓ 已被采纳
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
宣传栏