首页 > 解决方案 > 如何根据 Pandas 数据框中的前一行添加具有值的额外列?

问题描述

我有这个数据框:

'C1'|'C2'
 0  | x
 1  | x1
 1  | x2 
 2  | x3
 0  | y
 1  | y1
 2  | y2
 0  | z
 1  | z1

我需要像这样创建一个额外的列:

'C1'|'C2'|'C3'
 0  | x  | x
 1  | x1 | x
 1  | x2 | x
 2  | x3 | x
 0  | y  | y
 1  | y1 | y
 2  | y2 | y 
 0  | z  | z
 1  | z1 | z

基本上,当我在 C1 列中找到 0 时,我必须将 C2 列中的相应值放入所有子行(直到下一个 0)。

我是 Pandas 的新手,我读到我应该避免使用迭代操作数据框。

如何在不迭代的情况下获得这个结果?是否可以?

标签: pythonpandas

解决方案


如果与( )Series.where的条件不匹配,则用于缺失值,并通过 向前填充缺失值:Series.eq==ffill

df['C3'] = df['C2'].where(df['C1'].eq(0)).ffill()
print (df)
   C1  C2 C3
0   0   x  x
1   1  x1  x
2   1  x2  x
3   2  x3  x
4   0   y  y
5   1  y1  y
6   2  y2  y
7   0   z  z
8   1  z1  z

推荐阅读