Получить количество элементов в столбце массивов, основываясь на запятых и превратив количество в свой собственный столбец - PullRequest
1 голос
/ 24 января 2020

У меня есть фрейм данных, в котором один из столбцов выводит следующее, когда я запрашиваю уникальные значения (я изначально думал о ручном отображении счетчиков, если было меньше комбинаций):

df.amenities.unique()
array(['{TV,Wifi,Kitchen,Elevator,Heating,Washer,"First aid kit","Fire extinguisher",Essentials,Hangers,"Hair dryer",Iron,"Laptop friendly workspace","Private entrance"}',
       '{TV,Wifi,Kitchen,"Free parking on premises","Indoor fireplace",Heating,"Family/kid friendly",Washer,"First aid kit","Fire extinguisher",Essentials,"Lock on bedroom door",Hangers,"Hair dryer",Iron,"Laptop friendly workspace","Private entrance"}'])

Чтобы разобраться с этим массивом удобств, я решил сначала избавиться от кавычек:

df['amenities'] = df['amenities'].str.replace('"', '')

Моя стратегия состояла в том, чтобы посчитать количество запятых, появившихся в каждом элементе массива, добавить 1, чтобы учесть трейлинг пропущенная запятая и использование reset_index для присвоения имени столбцу, в котором я хочу, чтобы счетчики отображались в.

(df['amenities'].str.count(',').add(1).sum().reset_index(name='amenities_count'))

Что не совсем работает, потому что я получаю ошибку:

AttributeError: 'numpy.int64' object has no attribute 'reset_index'

Если Можно ли объяснить, почему это не очень хороший подход и что может быть хорошей альтернативой?

Спасибо за потраченное время.

Чтобы ответить Бернарду:

Dataframe:

    Apt    Counties    amenities
    S1       C1          {TV, "Kitchen", "WiFi"}
    S1       C1          {"Hair dryer"}
    S2       C1          {"Heating", Essentials}
    S2       C2          {"Cable", Kitchen, "WiFi"}

Output:

    Apt    Counties    amenities                       amenities_counts
    S1       C1          {TV, "Kitchen", "WiFi"}        3
    S1       C1          {"Hair dryer"}                 1
    S2       C1          {"Heating", Essentials}        2
    S2       C2          {"Cable", Kitchen, "WiFi"}     3

1 Ответ

2 голосов
/ 24 января 2020

В качестве образца: ',' плюс один и присвоение его новому столбцу

df['amenities_count'] = df.amenities.str.count(',').add(1)    

Out[1274]:
  Apt Counties                   amenities  amenities_count
0  S1       C1     {TV, "Kitchen", "WiFi"}                3
1  S1       C1              {"Hair dryer"}                1
2  S2       C1     {"Heating", Essentials}                2
3  S2       C2  {"Cable", Kitchen, "WiFi"}                3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...