已更新
我有一个 Pandas Dataframe,并且想要在条件满足时使用前行中的值
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
那么我如何基本上将 df.B.shift(1)
的结果“写入”数据框中,以便下一行可以再次使用它?
如果满足条件,则取前一行的结果,如果不满足,则保留该值。
最佳答案
我认为您正在寻找一个 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
关于python - 将组中的第一个值复制到条件成立的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630619/