Python groupby的不正确行为,带有“;datetime64[ns,UTC]";熊猫1.0.1中的抽样?

Python groupby的不正确行为,带有“;datetime64[ns,UTC]";熊猫1.0.1中的抽样?,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我试图按列对数据帧进行分组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

我试图按列对数据帧进行分组
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
为什么列
f493
现在包含列
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
e、 g只需在列
f496
中采样值

编辑:实际问题从这里开始…

如果将列“f496”转换为datetime类型,则会出现更多错误行为

 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'
逗号分隔测向源

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
编辑:


问题是返回的是一个项目
系列
,而不是标量

解决方案是通过以下方式将
系列
转换为标量:

顺便说一句,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

我想你需要
df=df.groupby(“f493”).aggregate({“f496”:lambda x:x.sample(1)}).reset_index()
,对吧?因为
df=df.groupby(“f493”).aggregate({“f496”:lambda x:x.sample(1)})的输出是
系列
@jezrael好的,你能尝试设置日期时间格式吗?在这种情况下,重置索引似乎没有帮助。也许我应该为它单独提一个问题,比如datetimes使用
df['f496']=pd.to_datetime(df['f496'])
OK,明白了,你能测试
df=df.groupby(“f493”).agg({“f496”:lambda x:x.sample(1).iat[0]})。重置索引()
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
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