2017-06-06 105 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列的變化所致。再次感謝! –

相關問題