Я пытаюсь сгруппировать фрейм данных по столбцу 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
.
РЕДАКТИРОВАТЬ: Фактическая проблема начинается здесь .. .
Еще более неправильное поведение, если мы повернем столбец "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'
Разделенный запятыми источник 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