【问题标题】:Python: Extracting mean and chronological information from grouped dataPython:从分组数据中提取均值和时间信息
【发布时间】:2021-09-27 19:56:06
【问题描述】:

我有以下数据:

 cluster    col1        col2        timestamp
0   1      34.000000    89.320000   2021-07-13 21:15:11.232
1   1      97.540001    29.000000   2021-06-13 14:22:11.682
2   3      NaN          1.030000    2021-04-01 10:10:45.623
3   1      NaN          22.670000   2021-06-13 10:54:00.329
4   1      92.339996    NaN         2021-05-13 13:12:01.000
5   2      43.200001    22.450001   2021-03-02 17:05:02.342
6   2      NaN          45.000000   2021-06-13 14:17:11.454
7   2      92.230003    10.000000   2021-06-13 11:22:11.311
8   3      13.000000    1.320000    2021-06-13 18:22:11.324

按集群分组并按时间顺序设置:

df_grouped = df.groupby("cluster").apply(lambda x: x.sort_values(by = "timestamp"))

我的目标是计算每个集群的 col1 和 col2 的均值,并提取最早和最晚的时间。换句话说,我想要以下输出:

    cluster    col1_mean    col2_mean   start_time              end_time
0   1          74.626666    46.996667   2021-05-13 13:12:01.000 2021-07-13 21:15:11.232
1   2          67.715002    25.816667   2021-03-02 17:05:02.342 2021-06-13 14:17:11.454
2   3          13.0         1.175       2021-04-01 10:10:45.623 2021-06-13 18:22:11.324

但是,时间戳给我带来了一些麻烦,因为我看不到如何计算列的平均值并提取时间。

当时间戳被排除时,我可以通过集群计算平均值:

df_excluding_time.groupby("cluster").mean()

>>
    col1    col2
cluster     
1   74.626663   46.996666
2   67.715004   25.816668
3   13.000000   1.175000

实现我的目标的最佳方法是什么?

【问题讨论】:

    标签: python pandas group-by timestamp mean


    【解决方案1】:

    您可以在 groupby 对象上使用agg 函数。

    df_grouped = df.sort_values(['cluster','timestamp']).groupby("cluster").agg({'col1':'mean', 'col2':'mean', 'timestamp':['first', 'last']})
    

    那么您的列索引将是多索引[('col1','mean'),('col2','mean'),('timestamp','first'), ('timestamp','last')]。把它放在你想要的格式,你可以手动做

    df_grouped.columns = ['col1_mean','col2_mean','start_time','end_time']
    

    最后,如果你想让簇列成为列而不是索引,只需这样做

    df_grouped = df_grouped.reset_index()
    

    【讨论】:

    • 对于大型数据集(大约 30,000 个观察值),这仍然是一种可接受的方法还是您认为循环会更有效?
    • 我不知道,但考虑到 pandas 的设计水平,我怀疑这对于大型数据集仍然有效(甚至可能是最佳的)。
    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多