Ich versuche, eine neue Spalte zu erstellen, die mir die Zählungen gibt, wenn eine bestimmte Gruppe auftritt. Ich tue so etwas wie die folgenden ...Effizientes Zählen gruppierter Elemente 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)
Wenn ich diesen Code ausführen, ist es unannehmbar langsam ist:
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
Es scheint, dass die meiste Zeit in schriftlicher Form, um die neuen Daten ausgegeben innerhalb der Tabelle. Gibt es vielleicht einen schnelleren Weg, dies zu erreichen? Ich glaube, dass es ein Weg, dies zu tun, schneller, weil dies wirklich so eine fundamentale Operation ist ...
wow, das ist mehrmals schneller. Vielen Dank! – ssm
Ich dachte schon, aber ich wollte die Tests machen. Bitte. – ayhan
Sehr schöne Lösung. :) – jezrael