Выполните итерацию кадра данных через одну строку и каждое имя столбца и заполните новый кадр данных для bkoeh-heatmap - PullRequest
0 голосов
/ 30 апреля 2019

Я прочитал csv-файл, используя pd.read_csv, и создал новый фрейм данных с временами выборки в первом столбце и именами местоположений в качестве следующих имен столбцов.Теперь я хотел бы заполнить значения из csv_read согласно времени выборки и имени местоположения.

read_csv dataframe (df):

Index   Location Description    ....   Sample Time          ...   Value

0       Location_1_100         ....   2018-12-13 00:30:00  ...    0.45

1       Location_1_101         ....   2018-12-13 00:30:00    ....  0.33

готов к заполнению dataframe (master):

Index   Sample Time            Location_1_100   Location_1_101   ...

0       2018-12-13 00:30:00   Value from df     Value from df

1       2018-12-13 01:00:00   Value from df     Value from df
import csv
import numpy as np
import pandas as pd

df = pd.read_csv(remove_bom('file.csv'), parse_dates=['Sample Time'])

df['Sample Time'] = df['Sample Time'].dt.round('30min')

sensoren = df.drop_duplicates('Location Description')

master = pd.DataFrame(data={'Sample Time':df['Sample Time']})
master = master.drop_duplicates()
master = master.reindex(columns=master.columns.tolist()+sensoren['Location Description'].tolist())

for ind, column in enumerate(master.columns[1:]):
    master[column][ind]=df.loc[(df['Location Description'] == column)&(df['Sample Time'] == master['Sample Time'][ind])

Этот код должен заполнять значения из df в master, но он заполняет только первое время выборки в первом местоположении, второе время выборки во втором местоположении и т. Д.

Iтакже пробовал некоторые вложенные циклы for, но поскольку я новичок в python, я не работал должным образом.

1 Ответ

0 голосов
/ 09 мая 2019

Я решил проблему с этим кодом:

i=0
    #Put columns in list
    columns=master.columns.tolist()
    #Delete "Sample Time"
    del columns[0]
    #Remove strange indices
    master=master.reset_index(drop=True)
    #Iterate through columns
    for y in columns:
    #Iterate through times
        for x in master.loc[:,'Sample Time']: 
    #Check if a value was found (needed for iloc)
            if not ((df.loc[(df['Location Description'] == y)&(df['Sample Time'] == x), 'Value']).empty):
    #Copy value to master, if there are multiple values take the first
                master.loc[i,y]=(df.loc[(df['Location Description'] == y)&(df['Sample Time'] == x), 'Value']).iloc[0]
    #Delete used row in df to improve performance
            df=df.drop(df.index[(df['Location Description'] == y)&(df['Sample Time'] == x)])
            i+=1
    #Reset index when moving to next column
        i=0

Это работает, но у меня большие проблемы с производительностью. Он работает часами, но не закончится.

Любая помощь для повышения производительности приветствуется.

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