Pandas: сопоставить строку в df1 ['a'] с df2 ['a] и присвоить значение для соответствующего кодирования df2 [' b '] для df1 [' new '] - PullRequest
0 голосов
/ 18 марта 2020

Фон

Я смотрю на Набор данных коронавируса из CSSEGISandData (github.com/CSSEGISandData/COVID-19.git). Я пытаюсь создать сюжетно-картографическую карту , которая показывает случаев для каждого округа США .

Вот пример набора данных csv из CSSEGISandData. Я объединил несколько дней в один файл:

         Province/State Country/Region         Last Update  Confirmed  \
259               Chicago             US 2020-01-24 17:00:00        1.0   
3028           Orange, CA             US 2020-02-01 19:53:00        1.0   
2445       San Benito, CA             US 2020-02-03 03:53:02        2.0   
3181      San Antonio, TX             US 2020-02-13 18:53:02        1.0   
4762  Humboldt County, CA             US 2020-02-21 05:13:09        1.0   

      Deaths  Recovered  Latitude  Longitude            file  \
259      0.0        0.0       NaN        NaN  01-24-2020.csv   
3028     0.0        0.0       NaN        NaN  02-01-2020.csv   
2445     0.0        0.0       NaN        NaN  02-24-2020.csv   
3181     0.0        0.0   29.4241   -98.4936  03-04-2020.csv   
4762     0.0        0.0       NaN        NaN  02-27-2020.csv  

Задача

Я хочу изменить этот пример графика (https://plot.ly/python/mapbox-county-choropleth/) и используйте округа из моего dataframe, для этого мне сначала нужно:

  1. Сопоставить все округа в моем файле с кодами в фипсах.

Я нашел здесь список кодов fips (https://github.com/kjhealy/fips-codes):

   fips            name state
0     0   UNITED STATES   NaN
1  1000         ALABAMA   NaN
2  1001  Autauga County    AL
3  1003  Baldwin County    AL
4  1005  Barbour County    AL

Как создать новый столбец в моем pandas датафрейм с правильным кодом fips?

Вот мой код, импортирующий данные COVID и коды fips

!git clone https://github.com/CSSEGISandData/COVID-19.git

#@title Import and Option to show print more data 
import pandas as pd 
import glob


#Get the coronavirus data for the US 
path = r'/content/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports' # use your path
all_files = glob.glob(path + "/*.csv") #collect all files in one
li = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)
df = pd.concat(li, axis=0, ignore_index=True, sort=False) #one dataframe
filter_USA=frame['Country/Region']=='US'
USA= frame[filter_USA]
print (USA.head())


#Get the county data for the US with fips 
county_url= 'https://raw.githubusercontent.com/kjhealy/fips-codes/master/state_and_county_fips_master.csv'
county = pd.read_csv(county_url)
print ( county.head()) 

Теперь мне нужно сопоставить названия провинций / штатов США с названиями округов и присвойте значение fips.

#somethin like 
for all USA['Province/State'] match to county.name
USA['fips'] = county match fips value

EDIT

Установка более длинной версии для фрейма данных для отображения различных проблем с именами:

  • проблема в верхнем и нижнем регистре
  • некоторые названия городов, а не округа
  • некоторые добавили записи в них
3027                                Los Angeles, CA
2369                                Santa Clara, CA
2003                                 San Benito, CA
2310                                    Madison, WI
2470                                    Seattle, WA
6175                                    Chicago, IL
2237                           San Diego County, CA
2805                           San Diego County, CA
1765                                San Antonio, TX
3657                            Humboldt County, CA
737                                 Santa Clara, CA
3629                           San Diego County, CA
2468                          Sacramento County, CA
1543                                    Ashland, NE
1549                                     Travis, CA
1560                                   Lackland, TX
420            Lackland, TX (From Diamond Princess)
410              Travis, CA (From Diamond Princess)
404               Omaha, NE (From Diamond Princess)
6436              Omaha, NE (From Diamond Princess)
4289           Lackland, TX (From Diamond Princess)
5047             Travis, CA (From Diamond Princess)
2421    Unassigned Location (From Diamond Princess)
1769                                      Tempe, AZ
303     Unassigned Location (From Diamond Princess)
4981    Unassigned Location (From Diamond Princess)
5015                          Sacramento County, CA
4208    Unassigned Location (From Diamond Princess)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...