Pandas groupby datetime и столбец затем применяются генерирует ValueError - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь сгруппировать свой фрейм данных и затем применить функцию к каждой строке фрейма данных:

df=pd.read_csv('stack.csv')
df['TIME_M']=pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f')
df.groupby(['SYM_ROOT',df['TIME_M'].dt.date]).apply(group_increment_to_end)

def group_increment_to_end(x):
    return x.iloc[0:1]

SYM_ROOT - это переменная категории, а TIME_M - это переменная даты и времени.

Тем не менее, я получаю следующую ошибку:

ValueError: Key 2017-01-03 00:00:00 not in level Index([2017-01-03], dtype='object', name=u'TIME_M')

Знаете ли вы, в чем причина проблемы? Это из-за того, что iloc нельзя применять к функции с несколькими индексами? Что если я захочу перебрать строки и добавить строки с помощью функции group_increment_to_end, как мне это сделать, если я не могу использовать функцию iloc?

ОБНОВЛЕНИЕ:

Набор данных можно скачать здесь .

| SYM_ROOT | TIME_M                     | BEST_BID | BEST_ASK | increment | genjud_incre | 
|----------|----------------------------|----------|----------|-----------|--------------| 
| A        | 2017-01-03 09:30:00.004712 | 45.91    | 46.12    | 0         | 4680         | 
| AA       | 2017-01-03 09:30:00.004014 | 28.55    | 28.57    | 0         | 4680         | 

1 Ответ

0 голосов
/ 27 июня 2018

Спасибо @ min2bro, я думаю, что знаю ответ.

Проблема с df['TIME_M'].dt.date, который является объектом с датой и временем пустоты 2017-01-03 00:00:00. Тем не менее, группировка по этому объекту возвращает ошибку, потому что панды не могут правильно распознать объект даты при разборе столбцов.

Правильным способом было бы выделить дату в виде столбца и группировать по этому объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...