/ / Etykieta według zamówienia w grupie - python, pandy

Etykieta według zamówienia w grupie - python, pandy

Posiadanie małej ramki danych z zabawkami:

df = pd.DataFrame({
"clients": pd.Series(["A", "A", "A", "B", "B"]),
"Price": pd.Series([1.0, 22.0, 15.0, 7.5, 5.0])
})

Chciałbym stworzyć nową etykietę w oparciu o kolejność cen dla każdego klienta:

   Price clients new_col
0    1.0       A       1
1   22.0       A       2
2   15.0       A       3
3    7.5       B       2
4    5.0       B       1

Mam nadzieję, że przykład wyjaśnia. Mogę oczywiście sortować dataframe ale nie jestem pewien, jak przetłumaczyć etykietowanie. Indeksy wierszy nie mają wpływu na sort_index:

  Price clients
0    1.0       A
2   15.0       A
1   22.0       A
4    5.0       B
3    7.5       B

Odpowiedzi:

2 dla odpowiedzi № 1

Wykonaj a groupby w kolumnie "klienci", a następnie zadzwoń transform w kolumnie "Cena" przechodzi w rank metoda:

In [409]:

df = pd.DataFrame({
"clients": pd.Series(["A", "A", "A", "B", "B"]),
"Price": pd.Series([1.0, 22.0, 15.0, 7.5, 5.0])
})
df["rank"] = df.groupby("clients")["Price"].transform(pd.Series.rank)
df
Out[409]:
Price clients  rank
0    1.0       A     1
1   22.0       A     3
2   15.0       A     2
3    7.5       B     2
4    5.0       B     1

transform zwróci Serię wyrównaną z oryginalnym df