Как мне найти временной интервал между самой ранней отметкой времени и самой последней отметкой времени одного столбца и сгруппировать его по другому столбцу? - PullRequest
1 голос
/ 09 июля 2020

Я работаю с большим файлом данных, и я хотел бы найти временное окно одного столбца от самой ранней отметки времени до последней отметки времени и сгруппировать его по строке в другом столбце с заголовком. Я работаю в python и juypter.

Test_Ordered_at Title 2020-04-07 15:06:00 Заказ зеленый 2020-04-07 18:56:00 Заказ зеленый 2020-04-07 15:07:00 Заказ зеленый 2020-04-07 18:55:00 Заказ зеленый
2020-03-07 16:55:00 Членство аннулировано 2020-03-07 17:55:00 Членство отменено
2020-03-07 18:55:00 Членство отменено

Результат должен быть таким:
Test_Ordered_at Title
03:50:00 Заказ зеленый
02:00:00 Членство отменено

Это мой код ниже

import pandas as pd
from datetime import datetime
from dateutil import parser
notmiss = df 

notmiss['Test_Ordered_At'] = notmiss['Test_Ordered_At'].astype('datetime64[ns]')
print(notmiss.head())
# Add a new column instance, this adds a value to each instance 
notmiss['instance'] = 1

# set index to time, this makes df a time series df and then you can apply pandas time series functions.
tf = notmiss.set_index(notmiss['Test_Ordered_At'], drop=True, inplace=True)



Ответы [ 2 ]

1 голос
/ 09 июля 2020

Вы можете сделать это, используя np.ptp

import pandas as pd
import numpy as np

data = {'Test_Ordered_at': ['2020-04-07 15:06:00','2020-04-07 18:56:00','2020-04-07 15:07:00','2020-04-07 18:55:00','2020-03-07 16:55:00','2020-03-07 17:55:00','2020-03-07 18:55:00'],
'Title': ['The order is green','The order is green','The order is green','The order is green','The membership is cancelled','The membership is cancelled','The membership is cancelled']}

df = pd.DataFrame(data)

df['Test_Ordered_at'] = pd.to_datetime(df['Test_Ordered_at'])
print(df.groupby('Title')['Test_Ordered_at'].agg(np.ptp))

Title
 The membership is cancelled   02:00:00
 The order is green            03:50:00
0 голосов
/ 09 июля 2020
  1. как только это дата и время, простое агрегирование и вычисление
data = '''Test_Ordered_at,        Title
2020-04-07 15:06:00, The order is green
2020-04-07 18:56:00, The order is green
2020-04-07 15:07:00, The order is green
2020-04-07 18:55:00, The order is green 
2020-03-07 16:55:00, The membership is cancelled
2020-03-07 17:55:00, The membership is cancelled 
2020-03-07 18:55:00, The membership is cancelled'''
da = [[i.strip() for i in l.split(",")] for l in data.split("\n")]
da
df = pd.DataFrame(da[1:], columns=da[0])
df.Test_Ordered_at = pd.to_datetime(df.Test_Ordered_at)
df2 = df.groupby("Title")["Test_Ordered_at"].agg(["min","max"]).reset_index()
df2["Test_Ordered_at"] = df2["max"] - df2["min"]
df2.drop(columns=["min","max"])

вывод

    Title   Test_Ordered_at
0   The membership is cancelled 02:00:00
1   The order is green  03:50:00

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