Слияние значений времени на одну минуту из csv с использованием Pandas Python 3 - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь сравнить тестовый файл с файлом модели и затем проверить его с результатом. Вот что я пробовал до сих пор:

import pandas as pd
data = pd.read_csv("data.csv",encoding = "utf-16", header = 0,sep="\t")
data.head(20)
createmodel = data.drop(labels=['param1','param3','param5','param7','param9','param13','param15','colorsame'], axis=1)
createmodel.drop_duplicates().to_csv("model.csv",index=False,header =True,sep="\t",encoding="utf-16")
createmodel.head(10)
createmodel.drop_duplicates().to_csv("test.csv",index=False,header =True,sep="\t",encoding="utf-16")
createmodel.head(10)
verifyresult = pd.read_csv("verify.csv",encoding = "utf-16", header = 0,sep="\t")
verifyresult.head(20)
result = pd.merge(testmodel,createmodel, on = ["param2","param4","param6","param8","param10","param11","param12","param14","param16"])   
result = result.drop_duplicates()

Вот файлы модель , тест и подтверждение

Я выполнил сравнение, используя оператор слияния, и получил вывод в переменной result.

Единственное, что меня беспокоит, это то, что мне нужно найти одну минуту позже значения в result.Time из verify.csv и затем объединить значения с результатом в другом столбце. И сохранить его как CSV.

Окончательный результат должен быть следующим:
Если следующий - это фрейм данных в переменной result:

2018.5.1 0:5 0-1    0-1 0-1 0-1 0--1    0   1   -43--42 78-79   Red

И verify.csv имеет:

2018.5.1 0:6 Green

, то есть значения, связанные с периодом времени в одну минуту значения result переменной.

Тогда новый кадр должен быть:

Time    param2  param4  param6  param8  param10 param11 param12 param14 param16 color Actual
2018.5.1 0:5 0-1    0-1 0-1 0-1 0--1    0   1   -43--42 78-79   Red Green

что является окончательным результатом.

Пожалуйста, предложите мне способ сделать и достичь того, чего я хочу.

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете преобразовать ваши 'Time' столбцы в дату и время, что позволяет вам легко вычесть одну минуту из DataFrame verify.csv, а затем вы можете просто объединить (или отобразить или что-то еще, что вы хотите присоединить к ним)

import pandas as pd

result['Time'] = pd.to_datetime(result['Time'], format='%Y.%m.%d %H:%M')
verifyresult['Time'] = pd.to_datetime(verifyresult['Time'],  format='%Y.%m.%d %H:%M')

# Only subtract one minute if it is a weekday
mask = verifyresult['Time'].dt.dayofweek < 5
verifyresult.loc[mask, 'Time'] = verifyresult.loc[mask, 'Time'] - pd.Timedelta(minutes=1)

result = result.merge(verifyresult, on='Time')
# or 
#result['Actual'] = result['Time'].map(verifyresult.set_index('Time').Actual)

Выходы:

                 Time param2 param4 param6 param8 param10  param11  param12  param14 param16 color Actual
0 2018-05-01 00:05:00    0-1    0-1    0-1    0-1    0--1        0        1  -43--42   78-79   Red  Green
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...