2016-02-21 31 views
5

itibaren Else Kullanım Değeri eğer: Ben sürece satır başına COL1 değeri kullanır bir sütun ('Col3') oluşturmak istiyorum Pandalar Kullanım Değeri Değil Null aşağıdaki dataframe Verilen Sonraki Sütun

import pandas as pd 
df = pd.DataFrame({'COL1': ['A', np.nan,'A'], 
        'COL2' : [np.nan,'A','A']}) 
df 
    COL1 COL2 
0 A  NaN 
1 NaN A 
2 A  A 

değer boştur (veya NaN). Değer boşsa (veya NaN), bunun değerini COL2'den kullanmak isterim.

istenen sonuçtur: önceden

COL1 COL2 COL3 
0 A  NaN A 
1 NaN A  A 
2 A  A  A 

teşekkürler!

cevap

12
In [8]: df 
Out[8]: 
    COL1 COL2 
0 A NaN 
1 NaN B 
2 A B 

In [9]: df["COL3"] = df["COL1"].fillna(df["COL2"]) 

In [10]: df 
Out[10]: 
    COL1 COL2 COL3 
0 A NaN A 
1 NaN B B 
2 A B A 
012 içine endeksi için kullanabilir: olmayan ilk NaN değerini içerdiğini (bu durumda sütunda)
3

biz biraz o zaman bu kadar uzun tek geçerli değer olarak orada herhangi bir sayıda sütun için çalışacak çalışır ve aslında göreceksiniz sizin df mod ise:

In [5]: 
df = pd.DataFrame({'COL1': ['B', np.nan,'B'], 
        'COL2' : [np.nan,'A','A']}) 
df 

Out[5]: 
    COL1 COL2 
0 B NaN 
1 NaN A 
2 B A 

In [6]:  
df.apply(lambda x: x[x.first_valid_index()], axis=1) 

Out[6]: 
0 B 
1 A 
2 B 
dtype: object 

first_valid_index endeks değeri döndürecektir

In [7]: 
df.apply(lambda x: x.first_valid_index(), axis=1) 

Out[7]: 
0 COL1 
1 COL2 
2 COL1 
dtype: object 

yüzden serinin

1

Sütun değerlerini koşullu olarak ayarlamak için np.where'u kullanabilirsiniz. Eğer COL2 değerleri mutasyona sakıncası yoksa

df = df.assign(COL3=np.where(df.COL1.isnull(), df.COL2, df.COL1)) 

>>> df 
    COL1 COL2 COL3 
0 A NaN A 
1 NaN A A 
2 A A A 

, istediğiniz sonucu elde etmek için bunları doğrudan güncelleyebilirsiniz.

df = pd.DataFrame({'COL1': ['A', np.nan,'A'], 
        'COL2' : [np.nan,'B','B']}) 

>>> df 
    COL1 COL2 
0 A NaN 
1 NaN B 
2 A B 

df.COL2.update(df.COL1) 

>>> df 
    COL1 COL2 
0 A A 
1 NaN B 
2 A A 
İlgili konular