Как вы суммируете похожие данные в csv, используя библиотеки plotly и pandas python?

#python #pandas #csv #sum #plotly-python

#python #pandas #csv #сумма #plotly-python

Вопрос:

Я пытаюсь создать график, используя pandas для чтения файла csv и plotly для создания гистограммы на Python.

Данные csv выглядят примерно так (это неверные данные, это пример):

 day,month,year,cases,deaths,countriesAndTerritories
11,11,2020,190,230, United_States_of_America
10,11,2020,224,132, United_States_of_America
9,11,2020,80,433, United_States_of_America
8,11,2020,126,623, United_States_of_America
  

Я успешно создал гистограмму, которая визуализирует количество смертей в месяц, используя этот код:

 import pandas as pd
import plotly.express as px

covid_data = pd.read_csv('data/data.csv')

united_states_data = covid_data[covid_data.countriesAndTerritories == 'United_States_of_America']

month_data = united_states_data[['month']]

death_data = united_states_data[['deaths']]

fig = px.bar(united_states_data, x='month', y='deaths', title='COVID-19 deaths by month')
fig.show()
  

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

Проблема в том, что для каждого месяца он складывает данные за каждый день друг на друга и показывает белые линии, разделяющие дни. Мне нужны только данные за каждый месяц, меня не волнуют дни. Как бы я поступил по этому поводу? Я подумал, что мне придется каким-то образом создавать новый набор данных для общего количества смертей за каждый месяц, добавляя данные за каждый из дней в одни и те же месяцы вместе?

Ответ №1:

Следующий код должен достичь вашей цели:

 df_plot = df.groupby('month', as_index=False).deaths.sum()
fig = px.bar(df_plot, x='month', y='deaths', title='COVID-19 deaths by month')
fig.show()
  

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

1. Вам нужно будет группировать по месяцам, годам и странам, да?

2. Если в анализе больше года и целевой контраст, да! Спасибо, что указали на это!

3. Это намного лучше, чем то, что я сделал, чтобы исправить это, спасибо!

Ответ №2:

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

 # create a dict that holds the data I want (set deaths to 0 for now)
monthly_deaths = [
    {"month": 1, "name": 'January', "deaths": 0},
    {"month": 2, "name": 'February', "deaths": 0},
    {"month": 3, "name": 'March', "deaths": 0},
    {"month": 4, "name": 'April', "deaths": 0},
    {"month": 5, "name": 'May', "deaths": 0},
    {"month": 6, "name": 'June', "deaths": 0},
    {"month": 7, "name": 'July', "deaths": 0},
    {"month": 8, "name": 'August', "deaths": 0},
    {"month": 9, "name": 'September', "deaths": 0},
    {"month": 10, "name": 'October', "deaths": 0},
    {"month": 11, "name": 'November', "deaths": 0},
    {"month": 12, "name": 'December', "deaths": 0},
]

# create a data frame of the data I want to use to achieve this
new_data = pd.DataFrame(united_states_data)

# iterate through the rows of the data frame and update the values of the dict
for i, j in new_data.iterrows():
    if float(j[['month']]) == 1:
        monthly_deaths[0]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 2:
        monthly_deaths[1]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 3:
        monthly_deaths[2]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 4:
        monthly_deaths[3]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 5:
        monthly_deaths[4]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 6:
        monthly_deaths[5]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 7:
        monthly_deaths[6]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 8:
        monthly_deaths[7]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 9:
        monthly_deaths[8]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 10:
        monthly_deaths[9]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 11:
        monthly_deaths[10]['deaths']  = int(j[['deaths']])
    if float(j[['month']]) == 12:
        monthly_deaths[11]['deaths']  = int(j[['deaths']])

# plot the data
fig = px.bar(monthly_deaths, x='name', y='deaths', title='COVID-19 deaths by month')
fig.show()
  

Результат таков:
введите описание изображения здесь