2014-09-02 17 views
10

mam DF w Pandy, która wygląda tak:zduplikowane wiersze w pand DF

Letters Numbers 
A  1 
A  3 
A  2 
A  1 
B  1 
B  2 
B  3 
C  2 
C  2 

szukam policzyć liczbę podobnych wierszy i zapisać wynik w trzeciej kolumnie. Na przykład, wyjście Szukam:

Letters Numbers Events 
A  1  2 
A  2  1 
A  3  1 
B  1  1 
B  2  1 
B  3  1 
C  2  2 

przykład tego, co szukam zrobić to here. Najlepszym pomysłem, jaki wymyśliłem, jest użycie count_values(), ale myślę, że to tylko jedna kolumna. Innym pomysłem jest użycie duplicated(), w każdym razie nie chcę konstruować żadnego -02op-. Jestem prawie pewien, że istnieje alternatywa Pythonona do pętli for.

Odpowiedz

17

Można GroupBy te dwie kolumny, a następnie obliczyć rozmiary grup:

In [16]: df.groupby(['Letters', 'Numbers']).size() 
Out[16]: 
Letters Numbers 
A  1   2 
     2   1 
     3   1 
B  1   1 
     2   1 
     3   1 
C  2   2 
dtype: int64 

Aby uzyskać DataFrame jak w swoim wyjściu przykład, można zresetować indeks z reset_index.

+0

Dziękuję bardzo – Guforu

+0

można podać dodatkowy kod dla realizacji 'reset_index()', aby uzyskać pożądany wynik. Próbuję zrobić rzecz dame z kilkoma dodatkowymi kolumnami, które chcę pogrupować według. – oliversm

6

Można użyć kombinacji groupby, transform a następnie drop_duplicates

In [84]: 

df['Events'] = df.groupby('Letters')['Numbers'].transform(pd.Series.value_counts) 
df.drop_duplicates() 
Out[84]: 
    Letters Numbers Events 
0  A  1  2 
1  A  3  1 
2  A  2  1 
4  B  1  1 
5  B  2  1 
6  B  3  1 
7  C  2  2 
+0

Dziękuję, ale nie rozumiem w tej chwili składni metody groupby. Nie powinno być groupby (["Listy", "Liczby"])? – Guforu

+0

Nie, grupuje się tylko według liter, a następnie liczy dla każdej grupy występowanie wartości w Liczbach. To powoduje to samo, co grupowanie według obu kolumn i obliczanie wielkości grup. – joris

+0

@joris zignorować ostatni komentarz – EdChum

Powiązane problemy