У меня есть следующий фрейм данных:
Я хочу, чтобы это выглядело так (индекс даты, столбцы станций):
Имена станций не важны, мне пришлось использовать другой файл, чтобы показать рабочий пример.
Этот первый кадр данных имеет столбцы 0 -23, которые представляют часы дня. Он также содержит информацию о дате и станции (местонахождение) в каждой строке. Мне нужно, чтобы индекс (или строка) был временем даты, объединяющим час из столбцов и дату из строк. Мне нужно, чтобы каждая станция была столбцом, а не сохраненным в строке.
Я использовал следующий код для его достижения, но обработка даже небольшого числа строк занимает очень много времени.
import os
import pandas as pd
idx = pd.IndexSlice
df=pd.read_csv(os.path.join(filepath,newfilename)) # get data
df=df[df['POC']==1] #only keep primary intrument at each site
cols=['Site AQS', 'Date (LST)', '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18',
'19', '20', '21', '22', '23']
df=df[cols] #subset to only relevant columns
df_align1=pd.pivot_table(df,index='Date (LST)',columns=['Site AQS']) #pivot data to easier view
ozone_df=pd.DataFrame() #create ouput df
for date in df_align1.index:
for station in df_align1.columns.get_level_values(1):
for i in df_align1.columns.get_level_values(0):
ozone_df.loc[pd.to_datetime(date+' '+str(i)+':00'),station]=df_align1.loc[date,idx[i, station]]
Вот ссылка на мои примеры данных, так что вы можете проверить код, который я написал.
https://drive.google.com/file/d/11Lzl_m_EBCxoBEutl0UP6_TKq6TNgVZI/view?usp=sharing
PS: Извините за плохие изображения, я использую удаленный компьютер и не могу получить хороший снимок экрана.