2016-04-13 18 views
3

kullanarak birden çok sütuna dayanan birden çok koşulu pandalar Bir panda veri karesinin İKİ koşullarına bağlı renklerini boyamaya çalışıyorum. Örnek:np.where

ise col1 değeri> col3 < B (yüzen) bir col2- değerinin (float) ve değeri, başka kol 4 = dize, daha sonra değeri: diğer dize.

Şu an çok farklı yollar denedim ve çevrimiçi bulduğum her şey yalnızca bir koşula bağlıydı.

Örnek kodum her zaman Hata: 'u yükseltir. Dizinin gerçek değeri belirsizdir. A.empty, a.bool(), a.item(), a.any() veya a.all() kullanın.

İşte kod. Başarı olmadan çeşitli varyasyonları denedim.

df = pd.DataFrame() 

df['A'] = range(10) 
df['B'] = range(11,21,1) 
df['C'] = range(20,10,-1) 

borderE = 3. 
ex = 0. 

#print df 

df['color'] = np.where(all([df.A < borderE, df.B - df.C < ex]), 'r', 'b') 

Btw: Anlıyorum, bunu kullanmak için değil nasıl ne söylüyor ama ... şimdiden teşekkürler!

cevap

6

Seçim kriterleri kullanır Boolean indexing:

df['color'] = np.where(((df.A < borderE) & ((df.B - df.C) < ex)), 'r', 'b') 

>>> df 
    A B C color 
0 0 11 20  r 
1 1 12 19  r 
2 2 13 18  r 
3 3 14 17  b 
4 4 15 16  b 
5 5 16 15  b 
6 6 17 14  b 
7 7 18 13  b 
8 8 19 12  b 
9 9 20 11  b 
1

bunu bir işlev IF sarın ve uygulanır:

def color(row): 
    borderE = 3. 
    ex = 0. 
    if (row.A > borderE) and(row.B - row.C < ex) : 
     return "somestring" 
    else: 
     return "otherstring" 

df.loc[:, 'color'] = df.apply(color, axis = 1) 

Verim:

A B C  color 
0 0 11 20 otherstring 
1 1 12 19 otherstring 
2 2 13 18 otherstring 
3 3 14 17 otherstring 
4 4 15 16 somestring 
5 5 16 15 otherstring 
6 6 17 14 otherstring 
7 7 18 13 otherstring 
8 8 19 12 otherstring 
9 9 20 11 otherstring 
İlgili konular