C'est un record de lutte pour frapper 100 œufs sans connaître l'œuf du scientifique des données. C'est un mystère que je puisse terminer la course. ~~ Même s'il disparaît en cours de route, pensez qu'il n'est pas donné à Qiita. ~~
100 articles frappants 100 Knock Guide
** Faites attention si vous essayez de le faire car cela inclut des spoilers **
Au moment de la rédaction de l'article, il était terminé jusqu'au 27, mais il y avait beaucoup de styles d'écriture que je ne connaissais pas, et il y en avait beaucoup qui disaient "J'ai écrit ceci, mais la réponse était celle-ci", donc je vais le laisser comme mémo.
C'est difficile à voir! Cette façon d'écrire est dangereuse! Si vous avez des questions, n'hésitez pas à me le faire savoir. ~~ Je vais l'utiliser comme nourriture tout en souffrant de dommages à mon cœur.
Cette fois de 19 à 22. [Précédente] 10-18 Première fois avec la table des matières
P-19: Attribuez des rangs au bloc de données des détails du reçu (df_receipt) dans l'ordre décroissant du montant des ventes (montant) par article, et extrayez les 10 premiers articles. Les articles doivent afficher l'ID client (customer_id), le montant des ventes (montant) et le rang attribué. Si le montant (montant) des ventes est le même, le même classement sera donné.
L'exigence cette fois est
id | amo | rank |
---|---|---|
A00 | 100 | 1 |
B00 | 70 | 2 |
C00 | 80 | 2 |
D00 | 70 | 4 |
Il semble que ce soit pour faire une table en forme En 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
(J'ai frappé SQL après un long moment)
Pour le moment, comptez le nombre de ventes b.amo
qui sont supérieures aux ventes que ʻamo et ʻa.amo
recherchent actuellement (car la plus grande est 0) + 1 Le contenu consiste à créer un classement et à ajouter cette colonne.
** Attention **: C'est un style d'écriture qui prend beaucoup de temps à calculer. Je l'ai essayé avec 10 coups SQL, mais cela a pris quelques minutes.
** Idem pour Dataframe **
df_receipt[['customer_id', 'amount']]
Et rank column
, et jointure (horizontalement) pour créer une table
Comment créer une colonne de classement
df_receipt['amount'].rank(method='min', ascending=False)
--ʻAscending = False, données en ordre décroissant (plus est prioritaire). ---
method = 'min'` renvoie un petit nombre (valeur minimale) comme données de classement.
** Pour rejoindre horizontalement **
pd.concat ([['Colonne A'], ['Colonne B']], axe = 1)
Il semble que pd.concat
soit joint verticalement (le tableau est attaché au bas du tableau) lorsque axis est la valeur par défaut, mais est joint horizontalement lorsque ʻaxis = 1` est ajouté.
Enfin, si vous modifiez le nom de la colonne et triez par ordre croissant
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)
Sera comme ça
** Bien sûr ** Je ne sais pas et c'est en conserve
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)
Je vais l'omettre car le 19 et certains contenus seront couverts La partie qui change
De plus, même si le montant (montant) des ventes est le même, donnez un classement différent.
Partie de. Autrement dit, comme affichage
id | amo | rank |
---|---|---|
A00 | 100 | 1 |
B00 | 70 | 2 |
C00 | 80 | 3 |
D00 | 70 | 4 |
Je veux prendre la forme.
-
method = 'min'
renvoie un petit nombre (valeur minimale) comme données de classement.
Vous pouvez changer cela, et après la conversion en données par ordre décroissant, en changeant min '' en
premier '', les nombres seront numérotés dans l'ordre d'apparition.
mine21.py
len(df_receipt)
mine22.py
len(df_receipt['customer_id'].unique())
~~ Avez-vous un commentaire? ~~
Si vous convertissez le 22e en SQL
SELECT COUNT(DISTINCT customer_id) FROM receipt
Je peux y aller. ~~ Qu'est-ce qui est le plus facile? ~~
J'ai senti que Python était plus rapide que SQL lorsque je comparais SQL et Python, alors j'ai finalement commencé à trouver un sens à l'utilisation de pandas. ~~ LIKE et SQL sont faciles ~~ Si vous résolvez simplement le problème, cela ne vous vient pas vraiment à l'esprit, alors j'aimerais à nouveau résoudre le problème, puis le régler.
Recommended Posts