我有多个巨大的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
我希望能够聚合多个文件的输出,即能够同时按所有文件中的这两列进行分组,并打印一个常见输出,其总出现次数为“是”或'不'或任何属性都可以。
PS-假设我在col3中对col5中的给定值有重复。我希望它们合并为一个而不计算两次。换句话说,如果AB12有两行,并且两行在col5中都是yes,我希望脚本将其计为一个而不是两个。
更新:
我通过执行以下操作删除了重复项:
g2 = df.drop_duplicates(['col3', 'col5'])
g3 = g2.groupby(['col3', 'col5']).size().sum(level=0)
print g3
我现在想一次在多个文件上使用groupby。如果文件没有这些列中的一个,则应该跳过它,我们应该转到下一个文件。
答案 0 :(得分: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
答案 1 :(得分:0)
在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