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 **
Der Link der Seite, auf die ich zuerst verwiesen habe, wurde nur zum ersten Mal geändert.
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 ich mein Herz schädige ~~.
Diese Lösung ist falsch! Diese Interpretation ist anders! Bitte kommentieren Sie, wenn Sie welche haben.
Diesmal von 33 bis 35. [Letztes Mal] 29-32 [Zum ersten Mal mit Inhaltsverzeichnis]
P-033: Berechnen Sie den durchschnittlichen Verkaufsbetrag (Betrag) für jeden Geschäftscode (store_cd) für den Datenrahmen für Belegdetails (df_receipt) und extrahieren Sie 330 oder mehr.
mine33.py
df=df_receipt
df=df.groupby('store_cd').agg({'amount':'mean'}).query("amount>=330")
df
'''Musterantwort'''
df_receipt.groupby('store_cd').amount.mean().reset_index().query('amount >= 330')
Probleme wie bisherige Überprüfung. Geben Sie den Bereich der Berechnungsdaten mit guroupby an Fügen Sie mit agg und eine Bedienzeile hinzu Geben Sie die Bedingung mit Abfrage an.
Wenn Sie denken, dass es nur ist, lautet die Modellantwort ".amount.mean ()" Das war's. Es scheint jedoch, dass es möglicherweise nicht funktioniert, wenn Sie die Spaltenspezifikationen schreiben, indem Sie sie mit "." Verbinden. Seien Sie also vorsichtig.
~~ Ich bin der Abfrage erlegen ~~ Ich denke, es wäre schön, den praktischen Teil der Modellantwort verwenden zu können, indem man ihn auf diese Weise zusammenfasst.
P-034: Addieren Sie für den Datenrahmen für Belegdetails (df_receipt) den Verkaufsbetrag (Betrag) für jede Kunden-ID (customer_id) und berechnen Sie den Durchschnitt aller Kunden. Wenn die Kunden-ID jedoch mit "Z" beginnt, handelt es sich um ein Nichtmitglied. Schließen Sie sie daher von der Berechnung aus.
mine34.py
df=df_receipt
df=df[df['customer_id'].str.contains('^[^Z]')].reset_index()
df.groupby('customer_id').amount.sum().mean()
'''Musterantwort'''
#Wie schreibe ich ohne Abfrage
df_receipt[~df_receipt['customer_id'].str.startswith("Z")].groupby('customer_id').amount.sum().mean()
#Wie schreibe ich mit Abfrage
df_receipt.query('not customer_id.str.startswith("Z")', engine='python').groupby('customer_id').amount.sum().mean()
Diesmal war es eine Frage mit zwei Mustern von Modellantworten. Ich benutze enthält
und benutze begin mit
in der Modellantwort. Wenn Sie in gewissem Maße an reguläre Ausdrücke gewöhnt sind, ist "enthält" einfacher zu schreiben, aber ist es schneller zu antworten, weil "startwith" nur nach vorne schaut?
Außerdem habe ich im regulären Ausdruck "andere als diejenigen, die mit Z beginnen" angegeben, aber beide Modellantworten definieren "Dinge, die mit Z beginnen" und sind "anders als das". Wenn der reguläre Ausdruck zu lang ist, dauert das Lesen einige Zeit. Wenn er zu lang ist, frage ich mich, ob dies der Fall ist.
Wenn Sie dieses Problem in SQL schreiben
py34.sql
SELECT SUM(amount)/COUNT(DISTINCT customer_id)
FROM receipt
WHERE NOT customer_id LIKE 'Z%'
Ich denke, es wird sich so anfühlen (Operation vorerst bestätigt)
P-035: Addieren Sie für den Datenrahmen der Belegabrechnung (df_receipt) den Verkaufsbetrag (Betrag) für jede Kunden-ID (customer_id), um den Durchschnitt aller Kunden zu ermitteln, und extrahieren Sie die Kunden, die über dem Durchschnitt einkaufen. .. Wenn die Kunden-ID jedoch mit "Z" beginnt, handelt es sich um ein Nichtmitglied. Schließen Sie sie daher von der Berechnung aus. Es müssen nur 10 Daten angezeigt werden.
mine35.py
df=df_receipt
df=df[df['customer_id'].str.contains('^[^Z]')].reset_index()
df=df.groupby('customer_id').amount.sum().reset_index()
df[df['amount'].mean() <= df['amount']].head(10)
'''Musterantwort'''
amount_mean = df_receipt[~df_receipt['customer_id'].str.startswith("Z")].groupby('customer_id').amount.sum().mean()
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
df_amount_sum[df_amount_sum['amount'] >= amount_mean].head(10)
Schließlich wird der Code für die Modellantwort länger. Danke an die beiden Buchstaben ~~ df ~~
Beim Schreiben war ich mir sehr bewusst, welche Berechnung für das Datenfeld durchgeführt wurde. Die Modellantwort ist auch in "amount_mean" und "df_amount_sum" unterteilt.
df=df_receipt
df=df[df['customer_id'].str.contains('^[^Z]')].reset_index()
df=df.groupby('customer_id').amount.sum().reset_index()
df[df['amount'].mean() <= df['amount']].head(10)
Ich habe mich nicht auf den Durchschnitt bezogen, außer auf den Vergleich von 4, und ich wollte nicht zwei dfs machen, also habe ich diesmal geschrieben. Das Problem besteht natürlich darin, zuerst den Durchschnitt zu ermitteln. Wenn Sie den Durchschnitt also in anderen Prozessen verwenden möchten, ist dieses Schreiben möglicherweise falsch.
In jedem Fall werden wir den "Durchschnitt der Summen" und die "Summen" vergleichen, also werden wir diesen Vergleich in 4 machen.
Das häufige Auftreten von ~~ .reset_index ()
hat auch die Bedeutung von Magie ~~
Es ist ein wenig kurz, da die Tabellenverknüpfung beim nächsten Mal beginnt und auf halbem Weg ist, also werde ich sie hier brechen. ~~ Aus diesem Grund habe ich mit Fragensätzen und Modellantworten sogar ein wenig verdient ~~
Recommended Posts