熊猫groupby在混合类型列上

时间:2020-09-21 11:02:16

标签: python pandas

我试图将pandas groupby应用于包含浮点数和字符串的列。 DataFrame看起来像:

     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 个答案:

答案 0 :(得分:2)

使用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'