2017-06-05 57 views
2

我想在列C中設置一個字符串,而列B中的值大於等於2(如果> = =是,則爲yes,否則如果> =爲False)。輸出應該如下:設置串,而系列是一個布爾值?

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

到目前爲止,我已經試圖執行嵌套循環,這是過於緩慢:

i= 0 
for row in range(0, len(df)-1): 
    if df['B'][i] >= 2: 
     if df['B'][i] >= 2: 
      df['C'][i] = 'yes' 
     elif df['B'][i] >= 2: 
      df['C'][i] = 'yes' 
+1

你的問題和你的for循環說兩個不同的東西。你沒有在你的問題中提到你所查詢的那一行之後的行也必須大於或等於2. –

+0

你是對的 - 我的道歉。這是來自先前的嘗試,所以我編輯了必要的更改。 –

回答

1

您可以使用np.where

df['C'] = np.where(df.B>=2, 'yes', 'no') 

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

像這樣的事情

df['C'] = 'no' 
df['C'][df['B'] >= 2] = 'yes' 
1

這可以通過通過使用列B上的「適用」以及lambda函數和三元「if」完成:

import pandas as pd 
df = pd.DataFrame.from_dict({'A': ['A', 'B', 'C'], 'B': [1, 2, 3]}) 
df['C'] = df['B'].apply(lambda r: "yes" if r >= 2 else "no") 

應用於DataFrame的列的「apply」可讓您將函數應用於數據框中的每個值。因此,我們測試每個值是否大於等於2,如果是,則返回「是」,否則返回「否」。

1

這也可以通過創建一個布爾值列「C」按你的條件做簡單:

df['C'] = df['B'] >= 2 

但如果你只想「是「和」否「的值,那麼你可以將你的布爾值列轉換爲字符串並應用替換函數。

df['C'] = df['C'].astype(str) 
df['C'].replace('False','No', inplace=True) 
df['C'].replace('True','Yes', inplace=True) 
相關問題