2016-07-11 3 views
3

Я работаю с AirBnB набора данных на Kaggle:Упрощающие категориальные переменные с Python/панд

https://www.kaggle.com/c/airbnb-recruiting-new-user-bookings 

и хотите упростить значения для столбца языка в 2-х групп - английский и неанглийских.

Например:

users.language.value_counts() 
en 15011 
zh  101 
fr  99 
de  53 
es  53 
ko  43 
ru  21 
it  20 
ja  19 
pt  14 
sv  11 
no  6 
da  5 
nl  4 
el  2 
pl  2 
tr  2 
cs  1 
fi  1 
is  1 
hu  1 
Name: language, dtype: int64 

И результат я хочу это:

users.language.value_counts() 
    english 15011 
    non-english 459 
    Name: language, dtype: int64 

Это своего рода решение я хочу:

def language_groupings(): 
    for i in users: 
     if users.language !='en': 
      replace(users.language.str, 'non-english') 
     else: 
      replace(users.language.str, 'english') 
    return users 

users['language'] = users.apply(lambda row: language_groupings) 

Кроме есть, очевидно, что-то не так с этим, поскольку он возвращает пустую серию, когда я запускаю value_counts в столбце.

ответ

2

Попробуйте это:

users.language = np.where(users.language !='en', 'non-english', 'english') 
+0

yep, я хотел опубликовать что-то подобное ('users.assign (lang = np.where (users.language == 'en', 'english', 'non-english')) ['lang']. value_counts() '), но вы были быстрее ...;) – MaxU

+0

Да, именно то, что я хотел ... спасибо! – vnessified

+0

Если его право. отметьте как правильно. и повышать, если можете. и удачи – Merlin

2

это то, что вы хотите?

In [181]: x 
Out[181]: 
     val 
en 15011 
zh 101 
fr  99 
de  53 
es  53 
ko  43 
ru  21 
it  20 
ja  19 
pt  14 
sv  11 
no  6 
da  5 
nl  4 
el  2 
pl  2 
tr  2 
cs  1 
fi  1 
is  1 
hu  1 

In [182]: x.groupby(x.index == 'en').sum() 
Out[182]: 
     val 
False 459 
True 15011 
+0

благодаря @MaxU! это также полезно для чего-то еще, что я хотел сделать – vnessified