python - 在 pandas 1.0.1 中使用“datetime64 [ns, UTC]”采样的 groupby 行为不正确?
问题描述
我正在尝试按列对数据f493
框进行分组,以便对“f496”列中的值进行采样,这就是我得到的
>>> df
f493 f496
0 344448.0 2016-11-21 14:26:56+00:00
1 372673.5 2016-08-17 18:15:54+00:00
2 372673.5 2016-08-17 18:15:54+00:00
>>> df["f493"]
0 344448.0
1 372673.5
2 372673.5
Name: f493, dtype: float64
>>> df["f496"]
0 2016-11-21 14:26:56+00:00
1 2016-08-17 18:15:54+00:00
2 2016-08-17 18:15:54+00:00
Name: f496, dtype: object
>>> df = df.groupby("f493").aggregate({"f496": lambda x: x.sample(1)})
>>> df["f496"]
f493
344448.0 2016-11-21 14:26:56+00:00
372673.5 2016-08-17 18:15:54+00:00
Name: f496, dtype: object
为什么 columnf493
现在包含 column 的值f493
?
我预期的结果
f493 f496
0 344448.0 2016-11-21 14:26:56+00:00
1 372673.5 2016-08-17 18:15:54+00:00
例如,简单地在列中采样值f496
。
编辑:实际问题从这里开始......
如果我们将列“f496”转换为日期时间类型,则会出现更多错误行为
df = df.astype({"f493":"float64", "f496":"datetime64[ns, UTC]"})
输出是一团糟。
>>> df["f496"]
f493
344448.0 2016-11-21 14:26:56+00:00
372673.5 1 2016-08-17 18:15:54+00:00
Name: f496, dtyp...
Name: f496, dtype: object
我不知道发生了什么事。。
>>> pd.__version__
'1.0.1'
逗号分隔的 df 源
f493,f496
344448.0,2016-11-21 14:26:56+00:00
372673.5,2016-08-17 18:15:54+00:00
372673.5,2016-08-17 18:15:54+00:00
编辑:
>>> df['f496'] = pd.to_datetime(df['f496'])
>>> df = df.groupby("f493").aggregate({"f496": lambda x: x.sample(1)}).reset_index(drop=True)
>>> df
f496
0 2016-11-21 14:26:56+00:00
1 2 2016-08-17 18:15:54+00:00
Name: f496, dtyp...
>>> df["f496"]
0 2016-11-21 14:26:56+00:00
1 2 2016-08-17 18:15:54+00:00
Name: f496, dtyp...
Name: f496, dtype: object
解决方案
问题是返回了一项Series
,而不是标量。
解决方案是通过以下方式转换Series
为标量Series.iat
:
df['f496'] = pd.to_datetime(df['f496'])
df = df.groupby("f493").agg({"f496": lambda x: x.sample(1).iat[0]}).reset_index()
print (df)
f493 f496
0 344448.0 2016-11-21 14:26:56+00:00
1 372673.5 2016-08-17 18:15:54+00:00
顺便说一句,这似乎是错误pandas 1.0.1
,因为在 pandas 0.23.1 中,两种解决方案都可以完美运行:
df['f496'] = pd.to_datetime(df['f496'])
df = df.groupby("f493").agg({"f496": lambda x: x.sample(1)}).reset_index()
print (df)
f493 f496
0 344448.0 2016-11-21 14:26:56+00:00
1 372673.5 2016-08-17 18:15:54+00:00
推荐阅读
- javascript - 如何通过调用不同的id函数来使用多个模型框?
- react-native - 我该如何解决这个问题
- amazon-web-services - 将 zip 文件上传到 lambda 函数时出错
- vue.js - Accordion 有一个默认的活动面板,但它不会打开
- php - FFMpeg 无法生成缩略图,但它将 mp4 转换为 mp3
- exact-online - ExactOnline - 错误 403:禁止 - 分区被阻止
- sql - 根据字段总和显示数据的比例
- faust - 使用 faust 流式访问 rpc 回复中的 kafka 标头
- php - 在文件中搜索多个字符串并输出数据
- python - 如何将“2019-11-30T07:00:00+09:00”日期转换为整数?