2017-06-06 75 views
0

我想保持列中的第一个值,而另一列不等于零。对于列B,值在-1,0,1之间交替。对于列C,值等于任何整数。目标是保持列C的第一个值,而列B等于零。目前的数据框如下:在列中保持第一个值,而另一列等于值?

A B C 
1 8 1 9 
2 2 1 1 
3 3 0 7 
4 9 0 8 
5 5 0 9 
6 6 0 1 
7 1 1 9 
8 6 1 10 
9 3 0 4 
10 8 0 8 
11 5 0 9 
12 6 0 10 

产生的数据帧应该如下:

A B C 
1 8 1 9 
2 2 1 1 
3 3 0 7 
4 9 0 7 
5 5 0 7 
6 6 0 7 
7 1 1 9 
8 6 1 10 
9 3 0 4 
10 8 0 4 
11 5 0 4 
12 6 0 4 
13 3 1 9 

回答

1

您需要先创建NaN S按条件C列,然后通过ffill添加值:

mask = (df['B'].shift().fillna(False)).astype(bool) | (df['B']) 
df['C'] = df.loc[mask, 'C'] 
df['C'] = df['C'].ffill().astype(int) 
print (df) 
    A B C 
1 8 1 9 
2 2 1 1 
3 3 0 7 
4 9 0 7 
5 5 0 7 
6 6 0 7 
7 1 1 9 
8 6 1 10 
9 3 0 4 
10 8 0 4 
11 5 0 4 
12 6 0 4 
13 3 1 9 

或使用where如果所有值的类型都是整数,则添加astype

mask = (df['B'].shift().fillna(False)).astype(bool) | (df['B']) 
df['C'] = df['C'].where(mask).ffill().astype(int) 
print (df) 
    A B C 
1 8 1 9 
2 2 1 1 
3 3 0 7 
4 9 0 7 
5 5 0 7 
6 6 0 7 
7 1 1 9 
8 6 1 10 
9 3 0 4 
10 8 0 4 
11 5 0 4 
12 6 0 4 
13 3 1 9 
+0

这两种解决方案都正确实施。谢谢你,我很感激! –

+0

我认为不是,因为9缺失:(检查新的解决方案 – jezrael

+0

我错过了,谢谢。出于我的目的,这个解决方案工作,因为列C是一个帮助列来计算一个新的价值似乎有一个不匹配的排在B列的最后0值以下,这可能是由于B列的变化所致。再次感谢! –

相关问题