0
特定のグループが発生したときにカウントを与える新しい列を作成しようとしています。パンダのグループ化された要素を効率的にカウントする
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
ほとんどの時間は、新しいデータを書き込むことに費やされていることが表示されます:私は...
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)
私はこのコードを実行すると、それが許容できないほど遅いですが、以下のようなものをやっていますテーブル内でおそらくこれを達成するより速い方法はありますか?私はあなたが欲しいものを正確に理解している場合、あなたはtransform
を使用することができます
うわー、これは何倍も高速です。ありがとう! – ssm
私はそう思っていましたが、私は試験をしようとしていました。どういたしまして。 – ayhan
非常に良い解決策。 :) – jezrael