Pandas 在逗号分隔的列中查找平均值

Pandas finding average in a comma separated column

我想根据以逗号分隔的一列取平均值,并在另一列上取平均值。

我的文件如下所示:

ColumnA ColumnB
A, B, C 2.9
A, C    9.087
D       6.78
B, D, C 5.49

我的输出应该是这样的:

A   7.4435
B   5.645
C   5.83
D   6.135

我的代码是这样的:

df = pd.DataFrame(data.ColumnA.str.split(',', expand=True).stack(), columns= ['ColumnA'])  
df = df.reset_index(drop = True)
df_avg = pd.DataFrame(df.groupby(by = ['ColumnA'])['ColumnB'].mean())
df_avg = df_avg.reset_index()

它必须在同一行附近,但无法弄清楚。

在您的解决方案中,index 按列 ColumnB 创建,以避免在 stackSeries.reset_index 之后丢失列值,最后添加了 as_index=False 列汇总后:

df = (df.set_index('ColumnB')['ColumnA']
        .str.split(',', expand=True)
        .stack()
        .reset_index(name='ColumnA')
        .groupby('ColumnA', as_index=False)['ColumnB']
        .mean())
print (df)
  ColumnA   ColumnB
0       A  5.993500
1       B  4.195000
2       C  5.825667
3       D  6.135000

DataFrame.explode 的替代解决方案:

df = (df.assign(ColumnA = df['ColumnA'].str.split(','))
        .explode('ColumnA')
        .groupby('ColumnA', as_index=False)['ColumnB']
        .mean())
print (df)
  ColumnA   ColumnB
0       A  5.993500
1       B  4.195000
2       C  5.825667
3       D  6.135000