Обобщение и структура данных Python

#python #pandas #dataframe

Вопрос:

У меня есть следующая проблема:

Я хочу суммировать все номера обращений каждого штата в следующем файле и отобразить их в новой таблице.

например, в файле за каждый день 2020/2021 года есть новые положительные случаи короны из штата Алабама.

благодаря пользователю в stackflow у меня есть количество всех новых обращений в 2020 году с использованием кода :

 total_sum2 = 0

for overall_outcome, dt, new_results_reported in zip(America2['overall_outcome'].values.tolist(),America2['date'].values.tolist(), America2['new_results_reported'].values.tolist()):
  ndt = int(str(dt)[:4])
  if (overall_outcome == 'Positive') and (ndt == 2020):
    total_sum2  = int(new_results_reported)

print(total_sum2)
 

state_name object overall_outcome object date object new_results_reported int64 total_results_reported int64 dtype: object

можно определить.

Как теперь я могу автоматически определить числа для каждого состояния, а затем сравнить их графически и отобразить в отдельной таблице?

Я был бы очень благодарен вам за помощь

введите описание изображения здесь

Комментарии:

1. Вы хотите определить количество 2020 или все?

Ответ №1:

Вы можете создать сводную таблицу с state_name индексом as и overall_outcome столбцами as, взяв при этом сумму new_results_reported :

 import pandas as pd

America2 = pd.read_csv('https://app.mipasa.com/download/759fc431-8bed-4dc1-aae0-b6d58484d4ec')
pivot_df = America2.pivot_table(index='state_name', columns='overall_outcome', values='new_results_reported', aggfunc='sum')
 

Это приведет к:

имя состояния Неубедительный Отрицательный Положительный
Алабама 8575 3.15222 e 06 454148
Аляска 1636 1.52321 e 06 91735
Аризона 9996 4.73217 e 06 737905
Арканзас 4471 2.05751 e 06 213053
Калифорния 190205 3.28396 e 07 3.21527 e 06

Теперь вы можете визуализировать данные многими способами. Например, простая гистограмма положительных случаев:

 pivot_df['Positive'].plot(kind='bar')
 

пс. вы также можете получить общее количество новых обращений напрямую pandas (вместо использования цикла for), например, отфильтровав фрейм данных и получив сумму new_results_reported :

 America2[(America2['overall_outcome']=='Positive') amp; (America2['date'].str.contains('2020'))]['new_results_reported'].sum()
 

Комментарии:

1. Эй, спасибо за ваш ответ. Работает ли это, даже если данные из каждого штата поступают ежедневно ? И как я могу узнать, сравните их на графике. Большое спасибо

2. как я могу сравнить каждое состояние сейчас с сообщением new_results_reported ? и как я могу сравнить положительное отрицательное и неубедительное

3. или другой вопрос, мои данные основаны на ежедневной базе по штату, как я могу показать, например, все новые данные, сообщаемые в Алабаме и всех других штатах, ежемесячно ? извините за все вопросы

4. Столбец даты не учитывается, он просто принимает сумму всех строк в кадре данных. И вы можете создавать всевозможные графики pivot_df.plot(kind='bar', stacked=True, figsize=(15, 5)) , например, давать столбчатую диаграмму всего. Проверьте эту страницу и примените примеры к своему собственному фрейму данных. По месяцам-это другая проблема, которая требует анализа даты в объект datetime, а затем группировки по месяцам

5. спасибо за помощь, у вас есть ссылка для анализа даты на объект datetime, а затем для группировки по месяцам? или есть идея, как я могу внедрить это в свой технический паспорт?