Dies ist ein Kampfbericht über das Klopfen von 100 Eiern, ohne das Ei des Datenwissenschaftlers zu kennen. Es ist ein Rätsel, ob ich das Rennen beenden kann. ~~ Auch wenn es unterwegs verschwindet, denken Sie bitte, dass es Qiita nicht gegeben wird. ~~
100 Klopfartikel 100 Knock Guide
** Sei vorsichtig, wenn du es versuchst, da es Spoiler enthält **
Zum Zeitpunkt des Schreibens des Artikels war ich bis zum 27. Buch fertig, aber es gab viele Schreibstile, die ich nicht kannte, und es gab viele Dinge, die "Ich habe das geschrieben, aber die Antwort war das", also werde ich es als Memo hinterlassen.
Das ist schwer zu sehen! Diese Schreibweise ist gefährlich! Wenn Sie Fragen haben, lassen Sie es mich bitte wissen. ~~ Ich werde es als Nahrung verwenden, während mein Herz geschädigt wird.
Diesmal von 19 bis 22. [Letztes Mal] 10-18 Zum ersten Mal mit Inhaltsverzeichnis
P-19: Geben Sie dem Datenrahmen für Belegdetails (df_receipt) in absteigender Reihenfolge des Verkaufsbetrags (Betrag) pro Artikel Ränge und extrahieren Sie die ersten 10 Artikel. Artikel sollten Kunden-ID (customer_id), Verkaufsbetrag (Betrag) und zugewiesenen Rang anzeigen. Ist der Verkaufsbetrag gleich, wird die gleiche Rangfolge angegeben.
Die Anforderung ist diesmal
id | amo | rank |
---|---|---|
A00 | 100 | 1 |
B00 | 70 | 2 |
C00 | 80 | 2 |
D00 | 70 | 4 |
Es scheint, dass es darum geht, einen Tisch in Form zu machen In SQL
rei.sql
SELECT id,amo amo,
(SELECT count(amo) FROM df b WHERE a.amo < b.amo)+1 rank
FROM df a ORDER BY rank
(Ich habe SQL nach langer Zeit getroffen) Derzeit wird die Anzahl der Verkäufe "b.amo" gezählt, die höher sind als die Verkäufe, die "amo" und "a.amo" derzeit betrachten (weil der größte 0 ist) + 1 Der Inhalt besteht darin, einen Rang zu erstellen und diese Spalte hinzuzufügen. ** Achtung **: Dies ist ein Schreibstil, dessen Berechnung viel Zeit in Anspruch nimmt. Ich habe es mit 10 Knocks SQL versucht, aber es hat ein paar Minuten gedauert.
** Gleiches gilt für Dataframe **
df_receipt[['customer_id', 'amount']]
Und Rang Spalte
und verbinden (horizontal), um eine Tabelle zu erstellen
Wie erstelle ich eine "Rangspalte"?
df_receipt['amount'].rank(method='min', ascending=False)
method = 'min'
gibt eine kleine Zahl (Mindestwert) als Rangdaten zurück.** Horizontal verbinden ** pd.concat ([['Spalte A'], ['Spalte B']], Achse = 1) ` Es scheint, dass "pd.concat" vertikal verbunden ist (die Tabelle wird am unteren Rand der Tabelle angehängt), wenn die Achse die Standardeinstellung ist, aber horizontal verbunden wird, wenn "Achse = 1" hinzugefügt wird.
Schließlich, wenn Sie den Spaltennamen ändern und nach aufsteigendem Rang sortieren
mine19.py
df_tmp = pd.concat([df_receipt[['customer_id', 'amount']] ,df_receipt['amount'].rank(method='min', ascending=False)], axis=1)
df_tmp.columns = ['customer_id', 'amount', 'ranking']
df_tmp.sort_values('ranking', ascending=True).head(10)
Wird so sein
** Natürlich ** Ich weiß es nicht und es ist Konserven
mine20.py
df=df_receipt
df=pd.concat([df[['customer_id','amount']] ,df['amount'].rank(method='first',ascending=False) ],axis=1)
df.columns=['customer_id','amount','ranking']
df.sort_values('ranking',ascending=True).head(10)
Ich werde es weglassen, weil der 19. und einige Inhalte behandelt werden Der Teil, der sich ändert
Geben Sie außerdem ein anderes Ranking an, auch wenn der Verkaufsbetrag (Betrag) gleich ist.
Teil von. Das heißt, als Anzeige
id | amo | rank |
---|---|---|
A00 | 100 | 1 |
B00 | 70 | 2 |
C00 | 80 | 3 |
D00 | 70 | 4 |
Ich möchte die Form annehmen.
-
method = 'min'
gibt eine kleine Zahl (Mindestwert) als Rangdaten zurück.
Sie können dies ändern und nach der Konvertierung in Daten absteigender Reihenfolge, indem Sie "min" in "first" ändern, werden die Nummern in der Reihenfolge ihres Auftretens nummeriert.
mine21.py
len(df_receipt)
mine22.py
len(df_receipt['customer_id'].unique())
~~ Hast du einen Kommentar? ~~
Wenn Sie den 22. in SQL konvertieren
SELECT COUNT(DISTINCT customer_id) FROM receipt
Ich kann gehen. ~~ Was ist einfacher? ~~
Ich hatte das Gefühl, dass Python schneller als SQL war, als ich SQL und Python mit dem tatsächlichen Rang verglich, und so fand ich endlich Sinn in der Verwendung von Pandas. ~~ LIKE und SQL sind einfach ~~ Wenn Sie das Problem nur lösen, fällt es Ihnen nicht wirklich ein, daher möchte ich das Problem erneut lösen und es dann lösen.
Recommended Posts