如何基于熊猫数据框中的前一行添加带有值的额外列?

时间:2019-05-08 11:04:21

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

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

如何获得结果而不进行迭代?有可能吗?

2 个答案:

答案 0 :(得分:3)

如果Series.whereSeries.eq==)的条件不匹配,则使用{{3}}来混淆值,并用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

答案 1 :(得分:2)

您也可以尝试以下操作:

df['C3']=df['C2'].astype(str).str[0]
print(df)