我试图按数据帧按列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
例如,只需在^{
编辑:实际问题从这里开始…
如果将列“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
编辑:
>>> 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
转换为标量:顺便说一句,这似乎是
pandas 1.0.1
中的错误,因为在pandas 0.23.1中,两种解决方案都能完美工作:相关问题 更多 >
编程相关推荐