2016-08-13 5 views
1

Ich habe folgende Datenrahmen:Gruppe von zwei Säulen und die Vorkommen jeder Kombination in Pandas zählen

data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']}) 

product_id user_id 
    p1  a1 
    p1  a1 
    p2  a1 
    p1  a2 
    p1  a2 
    p1  a2 
    p2  a3 
    p2  a3 
    p3  a3 

in realen Fall könnte es einige andere Spalten als gut, aber ich weiß, was Sie brauchen, ist zu so etwas wie diese Gruppe von product_id und user_id Spalten von Datenrahmen und die Anzahl der einzelnen Kombinationen zählen und es als eine neue Spalte in einem neuen dat Rahmen hinzufügen

Ausgabe soll:

user_id product_id count 
a1  p1   2 
a1  p2   1 
a2  p1   3 
a3  p2   2 
a3  p3   1 

Ich habe den folgenden Code versucht:

grouped=data.groupby(['user_id','product_id']).count() 

aber das Ergebnis ist:

user_id product_id 
a1  p1 
      p2 
a2  p1 
a3  p2 
      p3 

eigentlich das Wichtigste für mich ist, einen Spaltennamen Zahl zu haben, die die Anzahl der Vorkommen hat, ich brauche um die Spalte später zu verwenden.

+0

Mögliches Duplikat [Python: eine Frequenzzahl auf zwei Spalten (Variablen) in Pandas Datenrahmen basierend bekommen] (http://stackoverflow.com/questions/33271098/python-get-a-frequency-count- based-on-two-columns-variables-in-pandas-datafra) – Merlin

Antwort

4

Vielleicht möchten Sie das?

>>> data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']}) 
>>> count_series = data.groupby(['user_id', 'product_id']).size() 
>>> count_series 
user_id product_id 
a1  p1   2 
     p2   1 
a2  p1   3 
a3  p2   2 
     p3   1 
dtype: int64 
>>> new_df = count_series.to_frame(name = 'size').reset_index() 
>>> new_df 
    user_id product_id size 
0  a1   p1  2 
1  a1   p2  1 
2  a2   p1  3 
3  a3   p2  2 
4  a3   p3  1 
>>> new_df['size'] 
0 2 
1 1 
2 3 
3 2 
4 1 
Name: size, dtype: int64 
+0

Ja, sehr nah, aber wie kann ich sie in einem neuen Datenframe haben, vor allem die Größe Nummer als Spaltenname zum Beispiel 'Größe'? – sanaz

+0

eigentlich habe ich R Hintergrund und diese Aufgabe kann leicht mit dplyr Zusammenfassungen und count() – sanaz

+0

@sanaz Ich habe die Antwort aktualisiert. –

Verwandte Themen