Поворот данных COVID-19 JH в строки временных рядов - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь повернуть данные Джона Хопкинса, чтобы столбцы даты были строками, а остальная информация оставалась неизменной. Первые семь столбцов должны оставаться столбцами, но остальные столбцы (столбцы даты) должны быть строками. Мы будем благодарны за любую помощь.

Загрузка и фильтрация данных

import pandas as pd
import numpy as np
deaths_url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_US.csv'
confirmed_url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_US.csv'

dea = pd.read_csv(deaths_url)
con = pd.read_csv(confirmed_url)

dea = dea[(dea['Province_State'] == 'Texas')]
con = con[(con['Province_State'] == 'Texas')]

Просмотр последних данных и сводных данных

# get the most recent data of data
mostRecentDate = con.columns[-1] # gets the columns of the matrix

# show the data frame
con.sort_values(by=mostRecentDate, ascending = False).head(10)

# save this index variable to save the order.
index = data.columns.drop(['Province_State']) 

# The pivot_table method will eliminate duplicate entries from Countries with more than one city
data.pivot_table(index = 'Admin2', aggfunc = sum)

# formatting using a variety of methods to process and sort data
finalFrame = data.transpose().reindex(index).transpose().set_index('Admin2').sort_values(by=mostRecentDate, ascending=False).transpose()

Полученный фрейм данных выглядит следующим образом, однако он не сохранил ни одно из значений времени

enter image description here

Я также пытался:

date_columns = con.iloc[:, 7:].columns
con.pivot(index = date_columns, columns = 'Admin2', values = con.iloc[:, 7:])
ValueError: Must pass DataFrame with boolean values only

Редактировать: В соответствии с указаниями я попробовал команду плавления, указанную в первом ответе, и она не создает строки дат, она просто удалила все другие значения, не относящиеся к дате.

date_columns = con.iloc[:, 7:].columns
con.melt(id_vars=date_columns)

Конечный результат должен выглядеть следующим образом:

  Date  iso2    iso3    code3   FIPS    Admin2  Province_State  Country_Region  Lat Long_   Combined_Key
1/22/2020   US  USA 840 48001   Anderson    Texas   US  31.81534745 -95.65354823    Anderson, Texas, US
1/22/2020   US  USA 840 48003   Andrews Texas   US  32.30468633 -102.6376548    Andrews, Texas, US
1/22/2020   US  USA 840 48005   Angelina    Texas   US  31.25457347 -94.60901487    Angelina, Texas, US
1/22/2020   US  USA 840 48007   Aransas Texas   US  28.10556197 -96.9995047 Aransas, Texas, US

1 Ответ

0 голосов
/ 01 апреля 2020

Использование pandas расплав . Отличный пример здесь .

Пример:

In [41]: cheese = pd.DataFrame({'first': ['John', 'Mary'],
   ....:                        'last': ['Doe', 'Bo'],
   ....:                        'height': [5.5, 6.0],
   ....:                        'weight': [130, 150]})
   ....: 

In [42]: cheese
Out[42]: 
  first last  height  weight
0  John  Doe     5.5     130
1  Mary   Bo     6.0     150

In [43]: cheese.melt(id_vars=['first', 'last'])
Out[43]: 
  first last variable  value
0  John  Doe   height    5.5
1  Mary   Bo   height    6.0
2  John  Doe   weight  130.0
3  Mary   Bo   weight  150.0

In [44]: cheese.melt(id_vars=['first', 'last'], var_name='quantity')
Out[44]: 
  first last quantity  value
0  John  Doe   height    5.5
1  Mary   Bo   height    6.0
2  John  Doe   weight  130.0
3  Mary   Bo   weight  150.0

В вашем случае вам необходимо работать с фреймом данных (т. Е. con или finalframe или где бы ни находился ваш столбец даты). Например:

con.melt(id_vars=date_columns)

См. Спецификацию c пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...