簡體   English   中英

有效統計熊貓中的分組元素

[英]Efficiently counting grouped elements in Pandas

我正在嘗試創建一個新列,該列將在出現特定組時為我提供計數。 我正在做類似以下的事情...

import pandas as pd 

table = '''A B C
1 1 1
1 1 2
1 1 4
2 1 3
2 1 5'''

df = pd.DataFrame([t.split(' ') for t in table.split('\n')[1:]], 
        columns=table.split('\n')[0].split(' '))

def appendCnt(df, factors):
    f = 'counts-'+ '-'.join(factors)
    df[f] = 0
    for k, v in df.groupby(factors):
        df[f].ix[v.index] = len(v)
    return df

factors = ['A', 'B']
print appendCnt(df, factors)

當我運行此代碼時,它的速度慢得令人無法接受:

In [7]: run test
   A  B  C  counts-A-B
0  1  1  1           3
1  1  1  2           3
2  1  1  4           3
3  2  1  3           2
4  2  1  5           2

In [8]: %timeit for _ in xrange(5): appendCnt1(df, factors)
1 loops, best of 3: 225 ms per loop

看來大部分時間都花在寫表中的新數據上。 也許有更快的方法可以做到這一點? 我覺得必須有一種更快地完成此操作的方法,因為這實際上是一項非常基本的操作...

如果我正確理解了您想要的內容,則可以使用transform

df['counts-'+ '-'.join(factors)] = df.groupby(factors).transform("count")

df
Out[6]: 
   A  B  C  counts-A-B
0  1  1  1           3
1  1  1  2           3
2  1  1  4           3
3  2  1  3           2
4  2  1  5           2

暫無
暫無

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

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