#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, а затем для группировки по месяцам? или есть идея, как я могу внедрить это в свой технический паспорт?