python:使用groupby()和apply()在集群数据中排序datetime

mbskvtky  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(391)

我想对每个集群的datetime列进行排序。

latitude    longitude   cluster datetime          
0   57.723610   11.925191   1       2021-06-13 14:22:11.682
1   57.723614   11.925187   1       2021-06-13 14:22:13.562
2   57.723610   11.925172   1       2021-06-13 14:22:28.635 
3   57.724075   11.923708   2       2021-06-13 14:23:44.905 
4   57.723637   11.925056   2       2021-06-13 14:22:59.336 
5   57.723614   11.925178   3       2021-06-13 14:22:44.170
6   57.723827   11.924635   3       2021-06-13 14:23:14.479 
7   57.723610   11.925191   3       2021-06-13 14:22:04.000
8   57.723866   11.924005   3       2021-06-13 14:23:29.605

为此,我尝试使用groupby()和apply():


# Converting the time column from object to datetime

df["datetime"]= pd.to_datetime(df["datetime"], format="%Y-%m-%d %H:%M:%S.%f")

# Sorting date per cluster

df.groupby("cluster").apply(df.sort_values(by="datetime", inplace=True))

但是,我得到了一个错误:
“非类型”对象不可调用
我的最终目标是将每个集群中对应于最早(最早)和最晚(最近)时间的行提取到一个新的df。

3duebb1j

3duebb1j1#

排序不需要groupby,只需先按datetime排序,然后按群集排序:

df.sort_values(["cluster", "datetime"])

但是,如果您想获得每个集群中最早和最新的记录,那么最好在groupby中完成所有工作:

(df.groupby("cluster", as_index=False)
   .apply(lambda x: x.sort_values("datetime")
                     .iloc[[0, -1], :]))
cidc1ykv

cidc1ykv2#

你需要通过考试 functionapply 方法(可调用)。
你可以用 lambda 作用于 apply 如下-

df = df.groupby("cluster").apply(lambda x: x.sort_values(by = 'datetime'))

相关问题