【问题标题】:Pandas finding average in a comma separated column熊猫在逗号分隔的列中找到平均值
【发布时间】:2020-07-21 09:56:28
【问题描述】:

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

我的文件如下所示:

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()

它必须大致相同,但无法弄清楚。

【问题讨论】:

    标签: pandas csv average


    【解决方案1】:

    在您的解决方案中,由ColumnB 列创建index,以避免在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
    

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2015-09-11
      • 2015-01-21
      • 2021-03-10
      相关资源
      最近更新 更多