Pandas groupby 表示不处理日期时间列
Pandas groupby mean not working on datetime column
我有一个包含 date_time 列的数据框,格式为 datetime64[ns]:
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 filename 235 non-null object
1 date_time 235 non-null datetime64[ns]
2 r 235 non-null float64
df:
filename date_time r
0 01_ 2022-05-24 12:07:06 3.2E+05
1 01_ 2022-05-24 12:08:15 3.1E+05
2 01_ 2022-05-24 12:09:23 2.9E+05
3 02_ 2022-05-24 12:10:43 5.0E+06
4 04_ 2022-05-24 12:38:26 5.6E+06
.. ... ... ...
230 91_ 2022-05-26 09:57:50 8.9E+06
231 91_ 2022-05-26 09:59:06 8.3E+06
232 91_ 2022-05-26 10:00:23 8.5E+06
233 91_ 2022-05-26 10:01:40 9.0E+06
234 91_ 2022-05-26 10:02:57 9.1E+06
计算 date_time 的平均值,按文件名分组,仅适用于:
df_.groupby(["filename"]).agg(["mean"])
而不是:
df_.groupby(["filename"]).mean()
df_.groupby(["filename"]).agg("mean")
为什么它只适用于 df_.groupby(["filename"]).agg(["mean"])?
下面是带有示例的代码:
print("works with:")
print(df_.groupby(["filename"]).agg(["mean"]))
print ("doesn't work with: (no date_time column showing)")
print(df_.groupby(["filename"]).mean())
print(df_.groupby(["filename"]).agg("mean"))
OUT:
works with:
date_time r
mean mean
filename
01_ 2022-05-24 12:08:14.666666752 3.1E+05
02_ 2022-05-24 12:10:43.000000000 5.0E+06
04_ 2022-05-24 12:39:34.999999744 5.2E+06
05_ 2022-05-24 12:42:54.000000000 7.5E+04
06_ 2022-05-24 12:47:06.000000000 3.4E+05
... ... ...
87_ 2022-05-25 16:44:56.000000000 9.5E+06
88_ 2022-05-26 09:15:00.875000064 1.1E+05
89_ 2022-05-26 09:29:22.357143040 8.3E+06
90_ 2022-05-26 09:45:32.500000000 1.1E+05
91_ 2022-05-26 09:55:16.384615424 8.9E+06
[75 rows x 2 columns]
doesn't work with: (no date_time column showing)
r
filename
01_ 3.1E+05
02_ 5.0E+06
04_ 5.2E+06
05_ 7.5E+04
06_ 3.4E+05
... ...
87_ 9.5E+06
88_ 1.1E+05
89_ 8.3E+06
90_ 1.1E+05
91_ 8.9E+06
[75 rows x 1 columns]
r
filename
01_ 3.1E+05
02_ 5.0E+06
04_ 5.2E+06
05_ 7.5E+04
06_ 3.4E+05
... ...
87_ 9.5E+06
88_ 1.1E+05
89_ 8.3E+06
90_ 1.1E+05
91_ 8.9E+06
[75 rows x 1 columns]
当除了分组列之外只有一个日期时间列时,它在所有情况下都有效。
但是当你有更多列时,agg 似乎只适用于数值。
如果 arg 是字符串,则尝试对其进行操作:
- try to find a function (or attribute) on ourselves
- try to find a numpy function
他们还提到:
人们可能会尝试聚合 non-callable 属性
但不要让他们认为他们可以将参数传递给它
我尝试使用 np.mean,结果与使用 ('mean') 时的结果相同。
这是我到的为止。希望这有帮助。
我发布了问题 here on GITHUB,这是提供的解决方案:
问题出在 groupby 参数“numeric_only”= True(设置为默认值)中,它仅包含数字数据(删除 datetime64[ns] 列)。
它在将 ["mean"] 作为列表传递时起作用,因为:在 agg 中使用列表或字典时,DataFrame 在应用每个函数之前被分解为系列。
我有一个包含 date_time 列的数据框,格式为 datetime64[ns]:
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 filename 235 non-null object
1 date_time 235 non-null datetime64[ns]
2 r 235 non-null float64
df:
filename date_time r
0 01_ 2022-05-24 12:07:06 3.2E+05
1 01_ 2022-05-24 12:08:15 3.1E+05
2 01_ 2022-05-24 12:09:23 2.9E+05
3 02_ 2022-05-24 12:10:43 5.0E+06
4 04_ 2022-05-24 12:38:26 5.6E+06
.. ... ... ...
230 91_ 2022-05-26 09:57:50 8.9E+06
231 91_ 2022-05-26 09:59:06 8.3E+06
232 91_ 2022-05-26 10:00:23 8.5E+06
233 91_ 2022-05-26 10:01:40 9.0E+06
234 91_ 2022-05-26 10:02:57 9.1E+06
计算 date_time 的平均值,按文件名分组,仅适用于:
df_.groupby(["filename"]).agg(["mean"])
而不是:
df_.groupby(["filename"]).mean()
df_.groupby(["filename"]).agg("mean")
为什么它只适用于 df_.groupby(["filename"]).agg(["mean"])?
下面是带有示例的代码:
print("works with:")
print(df_.groupby(["filename"]).agg(["mean"]))
print ("doesn't work with: (no date_time column showing)")
print(df_.groupby(["filename"]).mean())
print(df_.groupby(["filename"]).agg("mean"))
OUT:
works with:
date_time r
mean mean
filename
01_ 2022-05-24 12:08:14.666666752 3.1E+05
02_ 2022-05-24 12:10:43.000000000 5.0E+06
04_ 2022-05-24 12:39:34.999999744 5.2E+06
05_ 2022-05-24 12:42:54.000000000 7.5E+04
06_ 2022-05-24 12:47:06.000000000 3.4E+05
... ... ...
87_ 2022-05-25 16:44:56.000000000 9.5E+06
88_ 2022-05-26 09:15:00.875000064 1.1E+05
89_ 2022-05-26 09:29:22.357143040 8.3E+06
90_ 2022-05-26 09:45:32.500000000 1.1E+05
91_ 2022-05-26 09:55:16.384615424 8.9E+06
[75 rows x 2 columns]
doesn't work with: (no date_time column showing)
r
filename
01_ 3.1E+05
02_ 5.0E+06
04_ 5.2E+06
05_ 7.5E+04
06_ 3.4E+05
... ...
87_ 9.5E+06
88_ 1.1E+05
89_ 8.3E+06
90_ 1.1E+05
91_ 8.9E+06
[75 rows x 1 columns]
r
filename
01_ 3.1E+05
02_ 5.0E+06
04_ 5.2E+06
05_ 7.5E+04
06_ 3.4E+05
... ...
87_ 9.5E+06
88_ 1.1E+05
89_ 8.3E+06
90_ 1.1E+05
91_ 8.9E+06
[75 rows x 1 columns]
当除了分组列之外只有一个日期时间列时,它在所有情况下都有效。 但是当你有更多列时,agg 似乎只适用于数值。
如果 arg 是字符串,则尝试对其进行操作:
- try to find a function (or attribute) on ourselves
- try to find a numpy function
他们还提到: 人们可能会尝试聚合 non-callable 属性 但不要让他们认为他们可以将参数传递给它
我尝试使用 np.mean,结果与使用 ('mean') 时的结果相同。
这是我到的为止。希望这有帮助。
我发布了问题 here on GITHUB,这是提供的解决方案:
问题出在 groupby 参数“numeric_only”= True(设置为默认值)中,它仅包含数字数据(删除 datetime64[ns] 列)。
它在将 ["mean"] 作为列表传递时起作用,因为:在 agg 中使用列表或字典时,DataFrame 在应用每个函数之前被分解为系列。