#python #pandas #dataframe #boolean #aggregation
#питон #панды #фрейм данных #логический #агрегация
Вопрос:
Я работаю с фреймами данных pandas, которые имеют несколько столбцов, каждый из которых может быть числовым, категориальным или логическим. В mwe категориальный столбец является геном, а значения в «bool_col» являются либо истинными, либо ложными для каждого гена. В pandas 1.2.4 агрегирование по категориальному столбцу с использованием функции медианы работает так, как я и ожидал:
import pandas as pd df = pd.DataFrame.from_dict( { "A1": {"gene": "A", "bool_col": True, "S2": 10}, "A2": {"gene": "A", "bool_col": True, "S2": 11}, "B1": {"gene": "B", "bool_col": False, "S2": 40}, "B2": {"gene": "B", "bool_col": False, "S2": 39}, "C1": {"gene": "C", "bool_col": True, "S2": 9}, "C2": {"gene": "C", "bool_col": True, "S2": 11}, }, orient="index" ) df_genes = df.groupby("gene").agg("median")
Как я и ожидал, агрегированный фрейм данных выглядит следующим образом, тип данных столбца «bool_col» по-прежнему является логическим, а столбец » S2 » содержит среднее значение соответствующей категории:
bool_col S2 gene A True 10.5 B False 39.5 C True 10.0
Однако после обновления до версии pandas 1.3.4 логические столбцы преобразуются в тип данных ‘float64’ во время агрегирования:
bool_col S2 gene A 1.0 10.5 B 0.0 39.5 C 1.0 10.0
Вероятно, можно было бы изменить тип данных столбца ‘bool_col’ обратно на логический, но ожидается ли такое поведение в pandas 1.3.4? Может быть, я что-то упускаю, но есть ли способ сохранить исходный логический тип данных? Ссылки и подсказки высоко ценятся!