Список кортежей вычисляет минимальную и максимальную разницу в дате - PullRequest
0 голосов
/ 02 мая 2018

У меня есть список кортежей с меткой времени в каждом кортеже, я хотел получить самую последнюю метку времени - старую метку времени для каждой первой позиции кортежа.

example_out put  = [(2038, A, [Timestamp('2010-01-24 00:00:00')- Timestamp('2010-02-20 00:00:00')]),(2038,B , [Timestamp('2017-01-24 00:00:00')- Timestamp('2017-02-20 00:00:00')])] It has to do for all the IDS

abc = [(2038, 'A', Timestamp('2010-01-24 00:00:00')),
(2038, 'A', Timestamp('2010-01-27 00:00:00')),
(2038, 'A', Timestamp('2010-01-30 00:00:00')),
(2038, 'A', Timestamp('2010-02-02 00:00:00')),
(2038, 'A', Timestamp('2010-02-06 00:00:00')),
(2038, 'A', Timestamp('2010-02-11 00:00:00')),
(2038, 'A', Timestamp('2010-02-18 00:00:00')),
(2038, 'A', Timestamp('2010-02-20 00:00:00')),
(2038, 'B', Timestamp('2017-01-24 00:00:00')),
(2038, 'B', Timestamp('2017-01-27 00:00:00')),
(2038, 'B', Timestamp('2017-01-30 00:00:00')),
(2038, 'B', Timestamp('2017-02-02 00:00:00')),
(2038, 'B', Timestamp('2017-02-06 00:00:00')),
(2038, 'B', Timestamp('2017-02-11 00:00:00')),
(2038, 'B', Timestamp('2017-02-18 00:00:00')),
(2038, 'B', Timestamp('2017-02-20 00:00:00')),
(2120, 'A', Timestamp('2010-01-24 00:00:00'))]    

это правильный способ, чтобы поместить все идентификаторы в список и затем вычислить минимальную и максимальную даты?

d = {}
l = []

    for r in abc:
        l.append(r)
        if r[0] not in d:
            d[r[0]] = r[1],[r[2]]

    print(d)

1 Ответ

0 голосов
/ 02 мая 2018

Поскольку вы уже используете pandas, вы можете использовать pd.DataFrame.groupby:

res = pd.DataFrame(abc, columns=['Year', 'Category', 'Date'])\
        .groupby(['Year', 'Category'])['Date'].agg(lambda x: x.max() - x.min())\
        .reset_index()

print(res)

   Year Category    Date
0  2038        A 27 days
1  2038        B 27 days
2  2120        A  0 days
...