как добавить столбец в dataframe после применения groupby - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть такой фрейм данных

    id             Date
    546451991   2018-07-31 00:00:00
    546451991   2018-08-02 00:00:00
    5441440119  2018-08-13 00:00:00
    5441440119  2018-08-13 00:00:00
    5441440119  2018-08-14 00:00:00
    5344265358  2018-07-13 00:00:00
    5344265358  2018-07-15 00:00:00
    5441438884  2018-07-19 00:00:00

Я хочу сгруппировать 'ID', затем отсортировать по дате, затем добавить столбец, содержащий дату следующего ROW

Например, я хочу вывод, подобный этому

 id             Date              Date1
546451991   2018-07-31 00:00:00  2018-08-02 00:00:00
546451991   2018-08-02 00:00:00  NULL
5441440119  2018-08-13 00:00:00  2018-08-14 00:00:00
5441440119  2018-08-14 00:00:00  2018-08-15 00:00:00
5441440119  2018-08-15 00:00:00  NULL
5344265358  2018-07-13 00:00:00  2018-07-15 00:00:00
5344265358  2018-07-15 00:00:00  NULL
5441438884  2018-07-19 00:00:00  NULL

я пытался, но безуспешно df.groupby('id')['Date'].sort_values() не работает

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Это, вероятно, то, что вы ищете, в то время как ответ @Naga Kiran делает это в одной строке, я просто упрощаю шаг за шагом.

import pandas as pd
df = pd.DataFrame({"id":[1, 2, 3, 4], "Date":["2018-07-01", "2018-08-01", "2018-09-02", "2018-10-03"]})
newdf = df.sort_values(["Date"], ascending=False)
newdf["Date1"] = newdf["Date"].transform(lambda x:x.shift(-1))
newdf.groupby("id").head(3)

Сначала я отсортировал фрейм данных, затем добавил Date1 с shift(-1), который сместил значение столбца в одну строку вверх, а затем сделал groupby("id").

Надеюсь, это поможет.

0 голосов
/ 08 сентября 2018
df['Date1'] = df.groupby('id')['Date'].apply(lambda x: x.sort_values().shift(-1))

Из:

            Date           id          Date1
0   2018-07-3100:00:00  546451991   2018-08-0200:00:00
1   2018-08-0200:00:00  546451991   NaN
2   2018-08-1300:00:00  5441440119  2018-08-1300:00:00
3   2018-08-1300:00:00  5441440119  2018-08-1400:00:00
4   2018-08-1400:00:00  5441440119  NaN
5   2018-07-1300:00:00  5344265358  2018-07-1500:00:00
6   2018-07-1500:00:00  5344265358  NaN
7   2018-07-1900:00:00  5441438884  NaN

редактировать

от sandeep-входов

df['Date1'] = df.groupby('id')['Date'].shift(-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...