【问题标题】:Remove quotation marks and brackets from Pandas DataFrame .csv file after performing a GroupBy with MultiIndex使用 MultiIndex 执行 GroupBy 后,从 Pandas DataFrame .csv 文件中删除引号和括号
【发布时间】:2020-09-29 18:46:24
【问题描述】:

我是 pandas 的新手,如果我对事情的解释有误,我深表歉意。

我有一个如下创建的数据框:

        arrays = [array1, array2]
        index = pd.MultiIndex.from_arrays(arrays, names = ("name1", "name2"))
        df = pd.DataFrame({"name3": array3, "name4": array4}, index=index)

然后我使用第二个最佳答案here 中的代码,使用指数执行加权平均。

        df2 = df.groupby(df.index).apply(lambda x: np.average(x.name3, weights=x.name4))
        print(df2)

控制台上的输出如下所示:

        (1, 2) 3
        (4, 5) 6
        (7, 8) 9

其中 (x,y) 是我分组的索引,最后的数字是加权平均值。

当我导出到 .csv 文件时,我得到一个如下所示的文件:

        ,0
        "(1, 2)",3
        "(4, 5)",6
        "(7, 8)",9

这不是我想要的。我想要一个如下所示的 .csv 文件:

        name1,name2,avg
        1,2,3
        4,5,6
        7,8,9

我尝试过使用 reset.index() 但这不起作用。我想删除 .csv 文件开头的括号、引号和流氓 ,0 。我怎样才能做到这一点?非常感谢。

【问题讨论】:

  • 能否提供一些示例数据?
  • @Roy2012 我现在添加了一些示例数据,如果您需要更多信息,请告诉我。
  • 我看到你得到了答案......太好了。

标签: python pandas dataframe pandas-groupby export-to-csv


【解决方案1】:

使用df.groupby 级别而不是索引:

df2 = df.groupby(level=df.index.names).apply(lambda x: np.average(x.name3, weights=x.name4))

# save the df2 to csv file
df2.rename('avg').reset_index().to_csv('data.csv', index=False)

【讨论】:

  • 我还有一个问题,如果您不介意回答 - 我如何计算加权平均值的误差并将其设为另一列?误差计算为 err = 1/sum(weights)
  • @JoeBarnes 我们可以使用df2 = df.groupby(level=df.index.names).apply(lambda x: pd.Series([np.average(x.name3, weights=x.name4), 1/x.name4.sum()], index=['avg', 'err']))
  • @JoeBarnes 另外,您不再需要.rename,因为现在我们已经在系列本身中指定了名称。
猜你喜欢
  • 2016-08-18
  • 2017-09-25
  • 2016-05-10
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多