【问题标题】:pandas group by sum of column sizepandas 按列大小总和分组
【发布时间】:2017-09-17 04:39:49
【问题描述】:

我有多个巨大的 tsv 文件,我正在尝试使用 pandas 进行处理。我想按“col3”和“col5”分组。我试过这个:

import pandas as pd
df = pd.read_csv('filename.txt', sep = "\t")
g1 = df.groupby(['col3', 'col5']).size()

到目前为止它工作正常,并打印如下输出:

yes AB12 1
    FG14 1
no  nn18 1
    pp76 1

我希望我的输出是这样的:

yes 2
no  2

我希望能够聚合来自多个文件的输出,即能够一次按所有文件中的这两列进行分组,并打印一个常见的输出,其中出现“是”或'no' 或任何可能的属性。

PS-假设我在 col3 中对 col5 中的给定值有重复项,我希望将它们合并为一个并且不计算两次。换句话说,如果 AB12 有两行并且两行在 col5 中都是 yes,我希望脚本将其计为一而不是二。

更新:

我通过以下方式删除了重复项:

g2 = df.drop_duplicates(['col3', 'col5'])
g3 = g2.groupby(['col3', 'col5']).size().sum(level=0)
print g3

我现在想一次对多个文件使用 groupby。如果一个文件没有这些列之一,它应该被跳过,我们应该转到下一个文件。

【问题讨论】:

  • 不就是df.groupby(['col3']).size()吗?
  • @EdChum 否。这样,它不会合并 col5 中任何可能的重复项。
  • @EdChum 看起来我错了,按两个列分组并不能消除重复项。请找到修改后的问题。
  • 对不起,如果您有其他问题,请发布其他问题,不要继续扩大您的要求
  • @EdChum 我已将它发布在我的原始问题本身中(而不是在以后的扩展中),我需要在多个文件上执行此操作。 Update 下面的任何内容都是我的扩展部分。如果您认为这不是我应该这样做的方式,我可以提出另一个问题。对不起。

标签: python pandas dataframe group-by


【解决方案1】:

sum() 接受level 参数,所以你可以写

df.groupby(['col3', 'col5']).size().sum(level=0)

为了汇总 MultiIndex 第一级的组大小(此处为“col3”)。例如:

>>> df
          a    
yes AB12  1
    FG14  2
no  nn18  3
    pp76  1

>>> df.sum(level=0)
     a    
no   4
yes  3

【讨论】:

    【解决方案2】:

    在 ajcr 的回答和附加行的帮助下,我能够通过执行删除基于两列的重复项

    import pandas as pd
    df = pd.read_csv('filename.txt', sep = "\t")
    g2 = df.drop_duplicates(['col3', 'col5'])
    g3 = g2.groupby(['col3', 'col5']).size().sum(level=0)
    print g3
    

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 1970-01-01
      • 2017-03-25
      • 2018-09-25
      • 2019-09-29
      • 2020-08-15
      • 1970-01-01
      • 2020-11-30
      • 2022-01-24
      相关资源
      最近更新 更多