Я обнаружил проблему, при которой другой фрейм данных выводится с последующими запусками всякий раз, когда в фрейм данных добавляется новый столбец, содержащий объекты cx Oracle в одном из его столбцов и вызывается функция groupby. Обходные пути просты (поэтому не нужно предлагать их); вместо этого мне более любопытно узнать причину.
Я подключаюсь к пространственной базе данных Oracle и делаю запрос в Python в качестве кадра данных. Этот фрейм данных имеет столбец «SHAPE», который содержит типы объектов cx_ Oracle .Object. Пример результирующего df выглядит следующим образом:
id value shape
1 10 <cx_Oracle.Object SDE.ST_GEOMETRY at 0x........>
2 20 <cx_Oracle.Object SDE.ST_GEOMETRY at 0x........>
1 30 <cx_Oracle.Object SDE.ST_GEOMETRY at 0x........>
2 40 <cx_Oracle.Object SDE.ST_GEOMETRY at 0x........>
Я хочу добавить столбец, groupby 'id' и сумму на 'value'. Выполнение следующего кода:
df['new_col'] = 'dummyvals'
gb = df.groupby(df.id, as_index=False).sum()[['id', 'value']]
yields
id value
2 40
4 60
Групповая операция не работает должным образом, так как она также объединяет столбец 'id'. Однако, если я запускаю строку groupby во второй раз (как и во все последующие разы), я получаю ожидаемый результат:
id value
1 40
2 60
Вот мои краткие наблюдения:
- Проблема возникает при добавлении нового столбца и групповой агрегации. Выходные данные первого выполнения агрегирования по группам суммируются по столбцу, по которому выполняется группировка ('id' в предыдущем примере), тогда как второй и последующие периоды агрегирования по группам дают ожидаемые результаты.
- Если мой Oracle запрос не запрашивает столбец SHAPE (поэтому cx_ Oracle. Типы объектов не вводятся в фрейм данных), эта проблема не возникает