【问题标题】:What is this strange number when I use pivot function in Pandas DataFrame?当我在 Pandas DataFrame 中使用数据透视函数时,这个奇怪的数字是多少?
【发布时间】:2020-12-11 07:59:53
【问题描述】:

我想按原样聚合docvector,按unixReviewTime 排序,并从上面的原始pandas DataFrame 中按reviewerID 分组。我写的代码如下。

user_reviews = pd.pivot_table(df, index=["reviewerID","unixReviewTime"],values=["docvector"], aggfunc=lambda x: x)

结果,我得到了这个奇怪的 user_reviews DataFrame,它在每个 docvector 前面都有数字。这里是下图中的 80839、130296、128549、86624。这些数字在原版中没有。

这些数字是什么,为什么要创建它们,没有这些数字如何制作数据透视表?

【问题讨论】:

  • 这是导致问题的原因:aggfunc=lambda x: x你想使用什么聚合函数?那么 unixereviewtime 专栏呢?你也想对此进行分组吗?
  • @IoaTzimas 我想保持 docvector 原样,所以我使用了这个函数。
  • 为什么不直接使用排序?无需聚合就无需使用数据透视。试试df.sort_values(by=["reviewerID","unixReviewTime"])
  • @IoaTzimas 谢谢。但我想使用reviewerID 作为索引。

标签: python pandas dataframe pivot-table


【解决方案1】:

当使用 lambda x:x 作为 aggfunc 时,x 表示每个组的 pd.Series,在这种情况下会导致问题

一种解决方案是使用 x.iloc[0] 来获取 docvector 列的值,考虑到其余列中没有重复项(我认为这是正确的,因为您不能将 lambda x:x 用作好吧)

鉴于此,以下应该可以正常工作:

user_reviews = pd.pivot_table(df, index=["reviewerID","unixReviewTime"],values=["docvector"], aggfunc=lambda x: x.iloc[0])

【讨论】:

    【解决方案2】:

    我发现了问题所在。

    问题出在aggfunc=lambda x: x 中,其中 lambda 返回的 x 是 Dataframe 对象,如下所示。它包括索引、值和元信息。

    所以使用aggfunc=lambda x: x.valuesaggfunc=lambda x: x.to_numpy 都适用于我的情况。 aggfunc=lambda x: x.iloc[0] 仅显示“功能不减少”错误消息。非常感谢你们体贴的cmets!

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2018-01-01
      • 2018-08-12
      • 2019-06-05
      相关资源
      最近更新 更多