Один из способов - создать временный столбец, например, с именем «first_ts» с groupby
в «потоке» и transform
, чтобы получить min
(поэтому первая дата) в столбце ' отметка времени для каждого потока. Теперь вы можете sort_values
по этому столбцу и drop
по временному столбцу.
# you might need to convert timestamp to datetime
df.timestamp = pd.to_datetime(df.timestamp)
#create the column
df['first_ts'] = df.groupby('thread').timestamp.transform(min)
#sort and drop
df = df.sort_values(['first_ts']).drop('first_ts',axis=1)
и вы получите, как ожидалось
print(df)
post timestamp thread
6 some 2004-09-01 09:32:00 game
3 text 2007-04-22 14:11:00 question
4 this 2007-04-24 11:03:00 question
5 be 2007-05-03 17:55:00 question
2 some 2008-07-10 15:23:00 nice
0 this 2009-10-30 16:51:00 hello
1 be 2009-11-02 17:11:00 hello
7 text 2010-01-01 03:32:00 wheather
или, если вы не хотите создавать столбец, вы также можете использовать reindex
с индексом отсортированного значения groupby
, например:
df = df.reindex(df.groupby('thread').timestamp.transform(min)
.sort_values().index)