我有这个数据框:

'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,就必须将所有子行(直到下一个0)放入C2列中的对应值。

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

没有迭代怎么能得到这个结果?可能吗?

最佳答案

如果与Series.whereSeries.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

关于python - 如何基于Pandas数据框中的前一行添加带有值的额外列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56039301/

10-15 02:04