Как мне преобразовать названия округов в коды фипсов?(сопоставьте названия округов с их фотографиями) - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть таблица, в которой один столбец - это названия округов, а другие столбцы - различные атрибуты.

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

У меня естьпромежуточная таблица, которая показывает код fips для каждого округа.

Вот пример того, какие данные у меня есть (начальные и промежуточные) и какие данные мне нужны (окончательные).

initial_df = {
    'county': ['REAGAN', 'UPTON', 'HARDEMAN', 'UPTON'], 
    'values': [508, 364, 26, 870]
}
intermediate_df = {
    'county': ['REAGAN', 'HARDEMAN', 'UPTON'], 
    'fips': [48383, 47069, 48461]
}
final_df = {
    'county': ['REAGAN', 'UPTON', 'HARDEMAN', 'UPTON'], 
    'fips': [48383, 48461, 47069, 48461], 
    'values': [508, 364, 26, 870]
}

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать 'слияние'.

import pandas as pd
initial_df = {'county': ['REAGAN', 'UPTON', 'HARDEMAN', 'UPTON'], 'values': [508, 
364, 26, 870]}
intermediate_df = {'county': ['REAGAN', 'HARDEMAN', 'UPTON'], 'fips': [48383, 47069, 
48461]}
final_df = {'county': ['REAGAN', 'UPTON', 'HARDEMAN', 'UPTON'], 'fips': [48383, 
48461, 47069, 48461], 'values': [508, 364, 26, 870]}
df1=pd.DataFrame(initial_df)
df2=pd.DataFrame(intermediate_df)
df3=df1.merge(df2)
print(df3)

, и результат будет вашим final_df.

0 голосов
/ 19 сентября 2018

Вы можете взять словарь из intermediate_df и преобразовать его в словарь с ключом от имени округа с fips в качестве значений.Затем используйте это для map поля county в initial_df.

mapping = {k: v for k, v in zip(*intermediate_df.values())}

df_final = pd.DataFrame(initial_df)
df_final['fips'] = df_final['county'].map(mapping)
>>> df_final
     county  values   fips
0    REAGAN     508  48383
1     UPTON     364  48461
2  HARDEMAN      26  47069
3     UPTON     870  48461
0 голосов
/ 19 сентября 2018

Вот один из способов:

initial_df = pd.DataFrame(initial_df)

final_df = initial_df.assign(fips = initial_df['county'].map(dict(zip(*intermediate_df.values()))))

Или:

initial_df = pd.DataFrame(initial_df)

final_df = initial_df.assign(fips = initial_df['county'].map(pd.DataFrame(intermediate_df).set_index('county')['fips']))

Оба результата:

>>> final_df
     county  values   fips
0    REAGAN     508  48383
1     UPTON     364  48461
2  HARDEMAN      26  47069
3     UPTON     870  48461
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...