2015-11-26 22 views
5

Powiedz, mam dwie kolumny, A i B, w moim dataframe:Jak połączyć dwie kolumny w ramce danych w Pandach?

A B 
1 NaN 
2 5 
3 NaN 
4 6 

Chcę dostać nową kolumnę, C, która wypełnia komórki NaN w kolumnie B, używając wartości z kolumny A:

A B C 
1 NaN 1 
2 5 5 
3 NaN 3 
4 6 6 

Jak to zrobić?

Jestem pewien, że to bardzo podstawowe pytanie, ale ponieważ jestem nowy w Pandach, każda pomoc zostanie doceniona!

Odpowiedz

5

Można użyć where który jest wektorowy if/else:

df['C'] = df['A'].where(df['B'].isnull(), df['B']) 

    A B C 
0 1 NaN 1 
1 2 5 5 
2 3 NaN 3 
3 4 6 6 
+0

Bardzo dziękuję za wskazanie klauzuli where, która wydaje się przydatna również w wielu innych celach. Właśnie obejrzałem dokumentację dla tego tutaj: http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.where.html. Zastanawiam się, co robi lokalny argument. Opis jest nieco niejasny. Czy ktoś mógłby mnie oświecić? – runawaykid

+1

możesz to uprościć: 'df ['C'] = df.A.where (df.B.isnull(), df.B)' jako 'isnull' jest dostępne dla df i serii, także ja nie zachęcić praktykę dostępu do kolumn jako atrybutów, które mogą prowadzić do dziwnego zachowania, lepiej to zrobić 'df ['C'] = df ['A']. gdzie (df ['B']. isnull(), df [ 'B']) ' – EdChum

+0

Edytuję mój wpis, masz prawo do dostępu do cols przez atrybut –

0
df['c'] = df['b'].fillna(df['a']) 

Więc co będzie .fillna to czy wypełni wszystkie wartości Nan w ramce danych Możemy przekazać dowolną wartość do niego Tutaj przekazujemy wartość df ['a'] Tak więc ta metoda wstawi odpowiednie wartości "a" do wartości Nan 'b' Ostateczna odpowiedź będzie w " c '

+0

Ta odpowiedź skorzystałaby z krótkiego wyjaśnienia, co robi '.fillna()', a być może także odsyłacza do dokumentacji. –

Powiązane problemy