我有此代码按col1分组,以按打开文件的时间顺序获得最小的日期,但它似乎以随机顺序出现,但这不是我所需要的。这是我的代码。
data=(df.groupby(['col1']).date
.apply(lambda x: pd.Series(x.value_counts()
.nsmallest(3).index))
.unstack(level=1).fillna(0).astype(str))
输出:
col1 0 1 2
file 1 2020-05-07 09:52:44.502 2020-05-06 04:53:32.449 2020-05-18 06:12:27.872
file 2 2020-05-08 09:02:44.502 2020-05-04 04:53:32.449 2020-05-19 06:12:27.872
我想要的输出:
col1 0 1 2
file 1 2020-05-06 04:53:32.449 2020-05-07 09:52:44.502 2020-05-18 06:12:27.872
file 2 2020-05-04 04:53:32.449 2020-05-08 09:02:44.502 2020-05-19 06:12:27.872
数据:
'{"col1":{"0":"file1","1":"file2","2":"file3","3":"file","4":"file1","5":"file2","6":"file3","7":"file4","8":"file3","9":"file1"},"date":{"0":"2020-05-01 00:38:38.154","1":"2020-05-01 00:38:53.904","2":"2020-05-01 00:43:52.487","3":"2020-05-01 03:35:40.399","4":"2020-05-01 04:19:32.615","5":"2020-05-01 04:22:15.545","6":"2020-05-01 04:22:47.439","7":"2020-05-01 04:23:48.706","8":"2020-05-01 04:25:26.140","9":"2020-05-01 04:28:36.257"}}'
btw,日期是字符串格式,我无法将其转换为日期时间,因为我需要在下一阶段将字符串连接到每个日期以进行一些区分。
[请帮助,如何获得所需顺序的输出。
我认为您想要这个:
df['count'] = df.sort_values('date').groupby('col1').cumcount()
df.set_index(['col1', 'count']).query('count <= 2')['date'].unstack()
输出:
count 0 1 2
col1
file 2020-05-01 03:35:40.399 NaN NaN
file1 2020-05-01 00:38:38.154 2020-05-01 04:19:32.615 2020-05-01 04:28:36.257
file2 2020-05-01 00:38:53.904 2020-05-01 04:22:15.545 NaN
file3 2020-05-01 00:43:52.487 2020-05-01 04:22:47.439 2020-05-01 04:25:26.140
file4 2020-05-01 04:23:48.706 NaN NaN