2017-08-01 2 views
1

Was ich versuche zu tun ist, pandas Wert counts + idxmax Funktionen in dask zu replizieren, weil ich eine Menge Daten habe. Hier ist ein Beispiel Datenrahmen:Dask Replikat Pandas Wert zählt auf Groupby

partner_num cust_id item_id revw_ratg_num revw_dt item_qty 
0 100 01 5 05/30/2000 0 
0 100 03 5 05/30/2000 0 
0 100 02 5 05/30/2000 0 
1 200 13 4 04/01/2000 0 
1 200 14 5 04/01/2000 1 
2 200 22 2 04/01/2000 1 
3 200 37 3 04/01/2000 1 
9 300 92 1 03/24/2000 1 
9 300 93 1 03/24/2000 1 
9 300 94 1 03/24/2000 0 
9 300 99 1 03/24/2000 0 
6 300 91 2 03/24/2000 0 

>>>df.head() 
    partner_num cust_id item_id revw_ratg_num  revw_dt item_qty 
0   0  100  1    5 05/30/2000   0 
1   0  100  3    5 05/30/2000   0 
2   0  100  2    5 05/30/2000   0 
3   1  200  13    4 04/01/2000   0 
4   1  200  14    5 04/01/2000   1 

In Pandas Sie es wie dies tun könnte:

df = pd.read_csv("fake_data.txt", sep="\t") 
df.groupby(["cust_id"]).item_qty.value_counts() 

cust_id item_qty 
100  0   3 
200  1   3 
     0   1 
300  0   3 
     1   2 

Wenn Sie jedoch gehen die gleiche Sache in Dask zu tun, es fehlschlägt, ein Attribut Fehler werfen

Was ich wirklich will, ist in der Lage, sowohl die Werte zu erhalten, als auch ihre Häufigkeit nach einer mehrspaltigen groupby in Dask. Irgendwelche alternativen Lösungen sind akzeptabel, ich möchte nur die Arbeit erledigen!

Antwort

3

value_counts wird nicht direkt in dask API für Datenrahmen unterstützt. Verwenden Sie apply, um das gewünschte Ergebnis zu erzielen.

Beachten Sie, dass value_counts als Series-Methode unterstützt wird.

>>> df1.groupby(['cust_id']).item_qty.apply(lambda x: x.value_counts()).compute() 
cust_id 
100  0 3 
200  1 3 
     0 1 
300  0 3 
     1 2 
Name: item_qty, dtype: int64 
+0

Wow danke !! Ich wusste, dass etwas nicht unterstützt wurde, ich wusste einfach nicht, wo ich falsch lag. +1 und akzeptiert bearbeiten: cant +1 wegen rep haha –