我尝试使用 pandas 处理多个巨大的 tsv 文件。我想按“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
我希望能够聚合来自多个文件的输出,即能够一次对所有文件中的这两列进行分组,并打印一个包含"is"或"is"的总出现次数的公共(public)输出“否”或该属性可能是什么。
PS- 假设我在 col3 中有重复的 col5 中的给定值,我希望将它们合并为一个,而不是计算两次。换句话说,如果 AB12 有两行并且两行在 col5 中都是 yes,我希望脚本将其计为一个而不是两个。
更新:
我通过以下操作删除了重复项:
g2 = df.drop_duplicates(['col3', 'col5'])
g3 = g2.groupby(['col3', 'col5']).size().sum(level=0)
print g3
我现在想同时对多个文件使用 groupby。如果一个文件没有这些列之一,它应该被跳过,我们应该转到下一个文件。
最佳答案
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
关于python - Pandas 按列大小总和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29285633/