使用pandas GroupBy或pivot\u选项卡查找每日最小值

2024-05-15 22:03:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从csv文件中获得的数据帧(经过一些筛选后),如下所示:

 df3.head(n = 10)

        DateTime            Det_ID  Speed
16956   2014-01-01 07:00:00 1201085 65.0
16962   2014-01-01 07:00:00 1201110 69.5
19377   2014-01-01 08:00:00 1201085 65.0
19383   2014-01-01 08:00:00 1201110 65.0
21798   2014-01-01 09:00:00 1201085 65.0
21804   2014-01-01 09:00:00 1201110 65.4
75060   2014-01-02 07:00:00 1201085 64.9
75066   2014-01-02 07:00:00 1201110 66.1
77481   2014-01-02 08:00:00 1201085 65.0
77487   2014-01-02 08:00:00 1201110 62.5

这表示在一天的不同时间由不同的探测器(现在是两个)测量的速度。我已将DateTime列转换为DateTime对象。在

我需要知道每个探测器的最小每日速度值。在

基本上,像这样的东西,我可以用来建立一个热度图。在

^{pr2}$

显然,我使用pivot表的方式是不正确的,因为我得到了多个每日速度值,而不仅仅是一个。我怀疑这是因为最小值是在每个唯一的日期时间字段上计算的,而不仅仅是日期部分。在

也在尝试groupby选项。在

list(df3.groupby(['DateTime'], sort = False)['Speed'].min())

但它只给出了一个数字列表,没有任何其他列。在

65.0,
 65.0,
 65.0,
 64.900000000000006,
 62.5,
 64.200000000000003,
 54.700000000000003,
 62.600000000000001,
 64.799999999999997,
 59.5, 

等等

如何仅隔离DateTime字段中的日期部分?我走的方向对吗?谢谢。在


Tags: 文件csv数据对象iddatetime时间head
2条回答

或使用unstack

df.DateTime = df.DateTime.dt.strftime('%m/%d/%Y')
df.groupby(['DateTime','Det_ID']).Speed.min().unstack()
Out[300]: 
Det_ID      1201085  1201110
DateTime                    
01/01/2014     65.0     65.0
01/02/2014     64.9     62.5

调用.dt.strftime并重新格式化DateTime列。在

df.DateTime = df.DateTime.dt.strftime('%m/%d/%Y')
df

        DateTime   Det_ID  Speed
16956  01/01/2014  1201085   65.0
16962  01/01/2014  1201110   69.5
19377  01/01/2014  1201085   65.0
19383  01/01/2014  1201110   65.0
21798  01/01/2014  1201085   65.0
21804  01/01/2014  1201110   65.4
75060  01/02/2014  1201085   64.9
75066  01/02/2014  1201110   66.1
77481  01/02/2014  1201085   65.0
77487  01/02/2014  1201110   62.5

现在,请致电pivot_table

^{pr2}$

相关问题 更多 >