我试图将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()
是否有一种简单的方法来克服混合类型,这使我上面写的这种方法不适用?
答案 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'