#python #pandas
#python #pandas
Вопрос:
Я пытаюсь применить pandas groupby к столбцу, который содержит числа с плавающей запятой и строки. Фрейм данных выглядит следующим образом:
name value
0 var_1 1.4
1 var_2 1110
3 var_2 900
4 var_3 'some_str'
5 var_1 2.7
Я пытаюсь применить метод groupby, чтобы выходной фрейм данных выглядел примерно так:
name value
0 var_1 2.15
1 var_2 1005
2 var_3 'some_str'
т.е. получить среднее значение всех тех значений, которые записываются несколько раз, и сохранить нечисловые значения такими, какие они есть.
Если бы столбец состоял только из числовых типов, это было бы достаточно просто реализовать как:
new_df = df.groupby('name').mean().reset_index()
Есть ли простой способ преодолеть смешанные типы, который делает этот метод, как я написал выше, неприменимым?
Ответ №1:
Использовать try-except
инструкцию:
#if need convert strings column to mixed values
df['value'] = pd.to_numeric(df['value'], errors='coerce').fillna(df['value'])
def f(x):
try:
return x.mean()
except:
return ','.join(x)
new_df = df.groupby('name')['value'].apply(f).reset_index()
print (new_df)
name value
0 var_1 2.05
1 var_2 1005
2 var_3 'some_str'