Получение индекса из Pandas фрейма данных с использованием строки из другого фрейма данных - PullRequest
0 голосов
/ 09 марта 2020

У меня есть данные (df), df1 содержит страны с числом заражений во времени (2000+ строк), а df2 содержит страны с численностью населения (200 строк).

Я пытался получить численность населения от df2 до df1, чтобы трансформировать инфекции в плотность инфекции (?) с течением времени.

По-моему, мне приходится перебирать строки df1 и проверять столбец Country для каждого индекса на df2. Если результат True, я могу скопировать население из df2 в df1. Я пробовал несколько подходов (только один ниже), но сейчас я в растерянности: (... может кто-нибудь дать мне пу sh в правильном направлении?

for index, row in df2.iterrows():
   df_test = df1['Country'].str.contains(row[0])

Редактировать обновление с помощью df1, df2 и предпочтительный результат: df1

   ObservationDate  Country/Region  Confirmed
0        -2.118978       Hong Kong        0.0
1        -2.118978           Japan        2.0
2        -2.118978           Macau        1.0
3        -2.118978  Mainland China      547.0
4        -2.118978     South Korea        1.0                  

df2

                 0             1
0             China  1.401580e+09
1             India  1.359321e+09
2  United States[c]  3.293798e+08
3         Indonesia  2.669119e+08
4            Brazil  2.111999e+08

df_preferred

   ObservationDate  Country/Region  Confirmed  Population
0        -2.118978       Hong Kong        0.0
1        -2.118978           Japan        2.0
2        -2.118978           Macau        1.0
3        -2.118978  Mainland China      547.0  1.401580e+09
4        -2.118978     South Korea        1.0  

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Предположим, что оба ваших DataFrames имеют следующий вид:

  Country        Date  Infection
0   Aaaaa  2020-03-02         10
1   Aaaaa  2020-03-04         20
2   Bbbbb  2020-03-02         15
3   Bbbbb  2020-03-04         20
4   Ccccc  2020-03-02         12
5   Ccccc  2020-03-04         40

  Country  Population
0   Aaaaa    10000000
1   Bbbbb    35200000
2   Ccccc    48700000

Затем, чтобы объединить их и сохранить результат в другом DataFrame, вы можете запустить:

df3 = df1.merge(df2, on='Country')

получить:

  Country        Date  Infection  Population
0   Aaaaa  2020-03-02         10    10000000
1   Aaaaa  2020-03-04         20    10000000
2   Bbbbb  2020-03-02         15    35200000
3   Bbbbb  2020-03-04         20    35200000
4   Ccccc  2020-03-02         12    48700000
5   Ccccc  2020-03-04         40    48700000

И для вычисления уровня заражения вы можете выполнить:

df3['InfectionRate'] = df3.Infection / df3.Population
0 голосов
/ 09 марта 2020

Я думаю, что это сделает работу:

data1 = {'Country':['Germany', 'USA',"Canada", "UK"], 'Inf':[2,5,6,8]} 
data2 = {'Country':['Germany', 'USA',"Canada", "UK"], 'popul':[80,300,30,70]} 
# Creating the dataframes
df1 = pd.DataFrame(data1) 
df2 = pd.DataFrame(data2) 
# Setting the index from the column country
df2 = df2.set_index('Country')
df1 = df1.set_index('Country')
# concating the dataframes along axis 1 without sorting
pd.concat([df1,df2], axis=1, sort=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...