Как l oop через dataframe транспонировать и объединять в новый dataframe - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть набор данных с данными измерений с 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')

Хотя это работает почти, Так как мне нужно исправить руководство по выходу, я думаю, что есть лучшие способы. Мой предпочтительный результат - это кадр данных с идентификатором, датой и столбцами с результатами измерений.

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