У меня есть набор данных с данными измерений с 220k строк и 34 столбцов. в нем есть строка для каждого измеренного параметра. Я хочу реорганизовать данные, сгруппированные по идентификатору и дате, с параметрами в виде столбцов. Данные могут быть найдены https://www.waterkwaliteitsportaal.nl/Beheer/Data/GrondwaterkwaliteitMeetgegevens
Поскольку слияние в al oop происходит очень медленно, я придумал написать пустой фрейм данных в качестве заголовка в CSV и добавить данные построчно из всех oop.
data = pd.read_csv('IMmetingen_GWkwaliteit_NL71_20191210.csv',sep=';')
measure = data.copy()
measure.drop(measure.columns.difference(['Meetpunt.lokaalID','Resultaatdatum']), 1, inplace=True)
measure=measure.drop_duplicates(subset=['Meetpunt.lokaalID','Resultaatdatum'])
#measure = measure2.copy()
param1 = data['Parameter.omschrijving'].unique()
for idx, x in enumerate( param1):
if x is np.nan:
delete = idx
param1 = np.param1(param1,delete,0) # delete nan
param2 = data['Grootheid.omschrijving'].unique()
list_1 = ['Meetpunt.lokaalID','Resultaatdatum']
newlist = list_1 + param2.tolist() + param1.tolist()
d = pd.DataFrame(columns=newlist)
d.to_csv('data_re.csv')
есть некоторая ошибка в именах столбцов, я получаю ошибку формы, так что попробуйте еще раз .. за исключением
for i, row in measure.iterrows():
try:
selectRows = data.loc[ (data['Meetpunt.lokaalID'] == row['Meetpunt.lokaalID']) & (data['Resultaatdatum'] == row['Resultaatdatum'])]
Df_work = selectRows.copy()
Df_work.drop(Df_work.columns.difference(['Parameter.omschrijving','Grootheid.omschrijving','Numeriekewaarde']),1,inplace=True)
Df_work['Parameter.omschrijving'].fillna(Df_work['Grootheid.omschrijving'],inplace=True )
del Df_work['Grootheid.omschrijving']
Df_work.set_index('Parameter.omschrijving',inplace =True)
Df_work.loc['Meetpunt.lokaalID'] = selectRows['Meetpunt.lokaalID'].iloc[0]
Df_work.loc['Resultaatdatum'] = selectRows['Resultaatdatum'].iloc[0]
Df_work_Trans= Df_work.transpose()
Df_work_Trans['Resultaatdatum'] = Df_work_Trans['Resultaatdatum'].astype(str)
d2 = d.append(Df_work_Trans)
d2.to_csv('data_re.csv',index=False,header=False, mode='a')
## too slow d= pd.merge ( d, Df_work_Trans, how='left', on= ['Meetpunt.lokaalID','Resultaatdatum'])
except:
continue
print('done')
Хотя это работает почти, Так как мне нужно исправить руководство по выходу, я думаю, что есть лучшие способы. Мой предпочтительный результат - это кадр данных с идентификатором, датой и столбцами с результатами измерений.