Можно ли как-нибудь подсчитать частоту городов в каждом штате и изменить названия городов, не входящих в топ-3, на «другие»? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть набор данных с отформатированным JSON столбцом «location», который выглядит следующим образом:

{"id":2442047,"name":"Los Angeles","slug":"los-angeles-ca","short_name":"Los Angeles, CA","displayable_name":"Los Angeles, CA","localized_name":"Los Angeles","country":"US","state":"CA","type":"Town","is_root":false,"expanded_country":"United States","urls":{"web":{"discover":"https://www.kickstarter.com/discover/places/los-angeles-ca","location":"https://www.kickstarter.com/locations/los-angeles-ca"},"api":{"nearby_projects":"https://api.kickstarter.com/v1/discover?signature=1584060704.9ef7b4f3e8e8affb0f28c150bc4bb5cc70e2953d&woe_id=2442047"}}}

Я извлек «state», «name» и «type» и добавил их в отдельных столбцах. Однако в целом слишком много городов (800i sh), и я не могу получить макеты для всех из них, поскольку мой набор данных будет слишком большим для обработки, и это не будет иметь смысла.

Чтобы решить эту проблему, я думаю сохранить только названия городов, в которых они находятся в топ 3 каждого штата, иначе они будут сгруппированы как «другие». Например, в Орегоне будут сохранены только «Портленд», «Евгений» и «Салем», а другие будут сгруппированы как «другие».

Пример кадра данных:

In [1]: df = pd.DataFrame([[Portland, OR], [Eugene, OR], [Salem, OR], [Bend, OR], [Albany, OR], [Eugene, OR], [Portland, OR], [Portland, OR], [Portland, OR], [Salem, OR], []Eugene, OR], [Portland, OR]], columns=['City', 'State'])

А вот вывод:

In [2]: df
Out [2]:
   City       State
0  Portland      OR
1  Eugene        OR
2  Salem         OR
3  Bend          OR
4  Albany        OR
5  Eugene        OR
6  Portland      OR
7  Portland      OR
8  Salem         OR
9  Eugene        OR
10 Portland      OR

И вот что ожидается на выходе:

   City       State
0  Portland      OR
1  Eugene        OR
2  Salem         OR
3  Others        OR
4  Others        OR
5  Eugene        OR
6  Portland      OR
7  Portland      OR
8  Salem         OR
9  Eugene        OR
10 Portland      OR

Вот мои коды для извлечения атрибутов и добавления их в фрейм данных:

city_pattern = r'"name":"([^"]+)"'
city_type_pattern = r'"type":"([^"]+)"'
state_pattern = r'"state":"([^"]{2})"' # limit result to 2 characters
city = []
city_type = []
state = []
for i in test_df['location']:
    try:
        state_result = re.search(state_pattern, str(i)).group(1)
    except:
        state_result = "null"
    try:
        city_result = re.search(city_pattern, str(i)).group(1)
    except:
        city_result = "null"
    try:
        city_type_result = re.search(city_type_pattern, str(i)).group(1)
    except:
        city_type_result = "null"

    print(city_result, city_type_result, state_result)
    city.append(str(city_result))
    city_type.append(str(city_type_result))
    state.append(str(state_result))

test_df['city'] = city
test_df['city_type'] = city_type
test_df['state'] = state

Можно ли как-нибудь подсчитать частоту городов в каждом штате и изменить названия не входящие в топ-3 часто встречающиеся города для «других»? Или есть ли другие лучшие способы справиться со всеми этими 800i sh различными названиями городов? Это граничило со мной в течение многих дней, и я был бы очень признателен за любую помощь! Спасибо ~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...