2015-03-19 18 views
6

Mam DataFrame takiego:pandy: Użyj if-else, aby wypełnić nową kolumnę

col1  col2  
    1   0 
    0   1 
    0   0 
    0   0 
    3   3 
    2   0 
    0   4 

chciałbym dodać kolumnę, która jest 1 jeśli col2 jest> 0 lub 0 w przeciwnym przypadku. Gdybym używał R, zrobiłbym coś takiego, jak

Jak mógłbym to zrobić w pythonie/pandach?

+0

Czy jest pytanie, jak dodać kolumnę lub jak użyć składni 'var = 1 if condition else 0'? – TigerhawkT3

+0

@ TigerhawkT3: oba – screechOwl

Odpowiedz

8

Można przekonwertować logiczną serię df.col2 > 0 do serii całkowitej (True staje 1 i False staje 0):

df['col3'] = (df.col2 > 0).astype('int') 

(Aby utworzyć nową kolumnę, po prostu trzeba nazwać i przypisać go do . seria, tablica lub lista takiej samej długości jak twój DataFrame)

ta produkuje col3 jak:

col2 col3 
0  0  0 
1  1  1 
2  0  0 
3  0  0 
4  3  1 
5  0  0 
6  4  1 

Innym sposobem utworzenia kolumny może być użycie np.where, która pozwala określić wartość jednej z wartości prawdziwych lub fałszywych i prawdopodobnie jest bliższa składni funkcji R ifelse. Na przykład:

>>> np.where(df['col2'] > 0, 4, -1) 
array([-1, 4, -1, -1, 4, -1, 4]) 
1

Zakładam, że używasz Pand (z powodu notacji "df"). Jeśli tak, możesz przypisać col3 flagę boolowską za pomocą .gt (więcej niż), aby porównać col2 z zero. Mnożenie wyniku przez jeden zamieni flagi binarne na jedyne i zera.

df1 = pd.DataFrame({'col1': [1, 0, 0, 0, 3, 2, 0], 
        'col2': [0, 1, 0, 0, 3, 0, 4]}) 

df1['col3'] = df1.col2.gt(0) * 1 

>>> df1 
Out[70]: 
    col1 col2 col3 
0  1  0  0 
1  0  1  1 
2  0  0  0 
3  0  0  0 
4  3  3  1 
5  2  0  0 
6  0  4  1 

Można również użyć wyrażenia lambda, aby osiągnąć ten sam wynik, ale uważam, że metoda jest prostsza powyżej dla danego przykładu.

df1['col3'] = df1['col2'].apply(lambda x: 1 if x > 0 else 0) 
Powiązane problemy