[英]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.