簡體   English   中英

pandas group by column size

[英]pandas group by sum of column size

我有多個巨大的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。 如果文件沒有這些列中的一個,則應該跳過它,我們應該轉到下一個文件。

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

在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM