pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]

Posted

技术标签:

【中文标题】pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]【英文标题】:pandas group by on Datetime with mm.dd.yyyy format [duplicate] 【发布时间】:2020-01-22 06:53:17 【问题描述】:

当我使用groupby().sum() 运行下面的聚合代码时,我的Date 系列的格式似乎错误:它似乎返回了27.08.2019 之后的未来日期的结果,即使我的系列在那之后没有日期:

                 Date        Obs
8189          2019-08-24   6.597940
8190          2019-08-24   0.758000
8191          2019-08-25  18.260892
8192          2019-08-25   6.590545
8193          2019-08-25   2.919198
8194          2019-08-25   0.838000
8195          2019-08-26   0.798000
8196          2019-08-26   6.597977
8197          2019-08-26  18.010977
8198          2019-08-26   2.882872
8199          2019-08-27  17.941132
8200          2019-08-27   0.847250
8201          2019-08-27   2.864728
8202          2019-08-27   6.730443

这段代码:

fiyat_w = fiyat_w.groupby('Date').sum()

fiyat_w = fiyat_w.reset_index()

返回聚合系列(每日传感器测量值的每日总和)以及对未来日期的观察:

2057          2019-12-01  27.980334
2058          2019-12-02  24.340758
2059          2019-12-03  21.063112
2060          2019-12-04  25.989285
2061          2019-12-05  27.839916
2062          2019-12-06  27.301501
2063          2019-12-07  27.049580
2064          2019-12-08  26.325082

fiyat_w['Date'].describe()

Out[59]: 
count                    2065
unique                   2065
top       2016-11-14 00:00:00
freq                        1
first     2014-01-01 00:00:00
last      2019-12-08 00:00:00
Name: DATE_OF_TRANSACTION, dtype: object

有什么问题?

【问题讨论】:

因为您的日期是mm.dd 格式,但是当您读错日期时,您将月份与日期颠倒了。请参阅有关正确转换日期时间的链接问题;您需要将显式格式字符串传递给to_datetime,不要依赖默认行为; pandas.read_csv(..., daysfirst) 被称为是错误的,尤其是。用于混合格式的日期。 【参考方案1】:

检查指示的源行,例如2057 到 2064,也许他们和你一样 把它放在你的问题中。

您的日期中的月份和日期部分的顺序似乎颠倒了。

还要查看其他行,“中间”部分(月份)是否总是介于 1 和 12。如果不是,它证实了我的怀疑。

【讨论】:

我认为问题与您提到的问题有关。在聚合之前,我的数据与我的原始日期对应的值没有问题。但是聚合后 DateTime 对象的格式会扭曲。在格式更改之前是否可以保持相同的日期时间格式?我的数据跨度从 01.01.2014 到 28.08.2019,聚合数据中不可能包含 2019 年 12 月的值。【参考方案2】:

我不明白。对我来说效果很好。

df
Out[6]: 
     row        Date        Obs
0   8189  24/08/2019   6.597940
1   8190  24/08/2019   0.758000
2   8191  25/08/2019  18.260892
3   8192  25/08/2019   6.590545
4   8193  25/08/2019   2.919198
5   8194  25/08/2019   0.838000
6   8195  26/08/2019   0.798000
7   8196  26/08/2019   6.597977
8   8197  26/08/2019  18.010977
9   8198  26/08/2019   2.882872
10  8199  27/08/2019  17.941132
11  8200  27/08/2019   0.847250
12  8201  27/08/2019   2.864728
13  8202  27/08/2019   6.730443

df2=df.groupby('Date')['Obs'].sum()

df2
Out[8]: 
Date
24/08/2019     7.355940
25/08/2019    28.608635
26/08/2019    28.289826
27/08/2019    28.383553
Name: Obs, dtype: float64

【讨论】:

以上是关于pandas group by 在 Datetime 上,格式为 mm.dd.yyyy [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python,在 Pandas DataFrame 的“group concat”中使用“order by”

如何在单个级别上添加新列时使用 pandas group-by?

Python Pandas:分类变量的Group BY函数

在 Pandas 中使用 group by 时如何将“first”和“last”函数应用于列?

Pandas Group By 和 Get Dummies

sql select group by a count(1) > 1 在python pandas中等效?