Pandas groupby в столбце смешанного типа

#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'