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