Фон
Я смотрю на набор данных вируса короны из CSSEGISandData : github.com/CSSEGISandData/COVID-19.git. Данные хранятся в формате CSV, разделенном на день (например, 01-24-2020.csv, 01-25-2020.csv, 01-26-2020.csv).
Я объединил все файлы в один pandas кадр данных, однако имеется дубликатов , как вы можете , см. Ниже со Швецией . Это происходит потому, что когда данные по Швеции не обновляются, файл следующего дня сообщает о последнем обновлении (то есть о последних данных).
Province/State Country/Region Last Update Confirmed
2229 Tibet Mainland China 2020-02-01 01:52:40 1.0
2990 Ningxia Mainland China 2020-02-01 02:13:00 26.0
3025 NaN Sweden 2020-02-01 02:13:00 1.0 #THIS
3023 NaN Spain 2020-02-01 02:13:00 1.0
1847 NaN Sweden 2020-02-01 02:13:26 1.0 #THIS
5910 NaN Sweden 2020-02-01 02:13:26 1.0 #THIS
2232 NaN Sweden 2020-02-01 02:13:26 1.0 #THIS
Цель
Я хочу:
- Подмножество данных, основанных на провинции / штате
- Если провинция / штат - NaN - > Использовать страну / регион (например, Швеция)
- Удалять все дубликаты в подмножествах на основе даты «Последнее обновление» с точной датой дня (исключая час, если в один и тот же день имеется более одного результата)
- вернуть фрейм данных
Для адресации 1 и 2 я заполнил NaN провинции / штата значением Country / Region. Как бы это не было идеально, я бы предпочел быть не может заполнить NaN.
Это мой код, но я не могу удалить дубликаты.
!git clone https://github.com/CSSEGISandData/COVID-19.git
#@title Import files csse_covid_19_data { form-width: "10px" }
import pandas as pd
import glob
path = r'/content/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports' # use your path
all_files = glob.glob(path + "/*.csv") #collect all files in one
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
df['file']=filename[-14:]
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True, sort=False) #one dataframe
frame['Province/State'].fillna(frame['Country/Region'], inplace=True) #putting the Coutry in teh NaN of Province for data cleanup
#change the 'Last Update'] to datetime format
frame['Last Update'] = pd.to_datetime(frame['Last Update'])
frame = frame.sort_values(by="Last Update")
РЕДАКТИРОВАТЬ: Решение Curret от: FROM YOBEN_S
Это текущее решение, оно работает, но я заполняю провинцию / штат страной / регионом, а не группируюсь по региону страны, когда штат провинции равен NaN
frame = frame.assign(day=frame['Last Update'].dt.date).\
drop_duplicates(subset=(['day', 'Province/State'])).drop('day',axis=1)
В идеале я хочу drop_duplicates , используя дату и провинцию / штат в качестве подпрограмм Это означает, что когда провинция / штат имеет значение NaN, переключитесь на регион страны