将组中的第一个值复制到条件成立的所有行

时间:2018-12-05 10:52:51

标签: python pandas

已更新

我有一个Pandas数据框,想使用条件前一行中的值

$result = $con->execute ();
// short 
$result = $this->Messages->getConnection()->execute ('Select * from ...')
// or ($aumTable is declared in question)
$result = $aumTable->getConnection()->execute ('Select * from ...');

输出:

    df = pd.DataFrame(data=[[1, 2],
                        [1, 4],
                        [1, 2],
                        [1, 3],
                        [1, 2],
                        [5, 3],
                        [1, 4]],
                  columns=['A', 'B'])


df.loc[df.A < df.B, 'B'] =  df.B.shift(1)
df.loc[df.A >= df.B, 'B'] =  df.B

但是我打算得到以下内容:

   A    B
0  1  NaN
1  1  2.0
2  1  4.0
3  1  2.0
4  1  3.0
5  5  3.0
6  1  3.0

那么我该如何基本上在数据帧中“写” A B 0 1 NaN 1 1 2.0 2 1 2.0 3 1 2.0 4 1 2.0 5 5 3.0 6 1 3.0 的结果,以便下一行可以再次使用它?

如果满足条件,则从上一行获取结果,如果不保留该值。

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找一种groupby转换first

df['B'] = df.groupby((df['A'] >= df['B']).cumsum())['B'].transform('first')
df
   A  B
0  1  2
1  1  2
2  1  2
3  1  2
4  1  2
5  5  3
6  1  3