Как назначить значения из DataFrame, используя np.where - PullRequest
2 голосов
/ 23 марта 2020

Я пытаюсь использовать np.where, используя 2 кадра данных, но я получаю сообщение об ошибке, говорящее о наличии проблемы со столбцом.

Следуя моему коду:

sum_d = source.groupby('Country')['Deaths'].sum() 
sum_c = source.groupby('Country')['Confirmed'].sum()    

Deaths = pd.DataFrame(sum_d)
Confirmed = pd.DataFrame(sum_c)

frames = [Deaths, Confirmed] 
Grouped = pd.concat(frames, axis=1)

Grouped.loc[:,'Mortality Rate Country'] = Grouped['Deaths']/Grouped['Confirmed']

до тех пор, пока здесь это работает правильно, и я получаю этот результат:

Grouped.head()

                 Deaths  Confirmed  Mortality Rate Country
Country                                               
Afghanistan       1         40                0.025000
Albania           2         89                0.022472
Algeria          17        201                0.084577
Andorra           1        113                0.008850
Angola            0          2                0.000000

source.head()

                    Country         Last Update  Confirmed  Deaths  Recovered  
Province/State                                                              
Hubei             China 2020-03-22 09:43:06      67800    3144      59433   
NaN               Italy 2020-03-22 18:13:20      59138    5476       7024   
NaN               Spain 2020-03-22 23:13:18      28768    1772       2575   
NaN             Germany 2020-03-22 23:43:02      24873      94        266   
NaN                Iran 2020-03-22 14:13:06      21638    1685       7931   

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

source['Mortality Rate Country'] = np.where(source['Country'] == Grouped['Country'], 
                                        Grouped['Mortality Rate Country'],
                                        source['Mortality Rate'])

Ошибка говорит:

KeyError: 'Country'

Во время обработки вышеупомянутого исключения произошло другое исключение:

Любые советы или идеи будут действительно оценены.

Заранее спасибо

1 Ответ

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

Если есть уникальные страны:

source['Mortality Rate Country'] = source['Deaths']/source['Confirmed']

Если есть дублированные страны:

Ваш код должен быть упрощен на GroupBy.transform для новых столбцов в оригинале данные заполнены совокупными значениями:

source['Deaths1'] = source.groupby('Country')['Deaths'].transform('sum') 
source['Confirmed1'] = source.groupby('Country')['Confirmed'].transform('sum') 

source['Mortality Rate Country'] = source['Deaths1']/source['Confirmed1']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...