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 **
Triste nouvelle: le problème ne progresse pas (41e au moment de la rédaction)
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 solution est fausse! Cette interprétation est différente! Veuillez commenter si vous en avez.
Cette fois de 36 à 40. [Dernière fois] 33-35 [Première fois avec la table des matières]
P-036: Combinez en interne la trame de données de détail de reçu (df_receipt) et la trame de données de stockage (df_store), et affichez tous les éléments dans la trame de données de détail de reçu et 10 noms de magasin (nom de magasin) dans la trame de données de magasin.
Enfin vint la jointure de table
En termes SQL
SQLteki.sql
SELECT *
FROM receipt r INNER JOIN store s
ON r.___ = s.___
Quel endroit, comme. (Ignorer la projection)
Pour les pandas (référence)
pd.maerge(df_receipt,df_store,on='store_cd',how='inner')
Parce que ça semble être
mine36.py
df=pd.merge(df_receipt,df_store[['store_cd','store_name']],on='store_cd',how='inner')
df.head(10)
'''Le modèle de réponse'''
pd.merge(df_receipt, df_store[['store_cd','store_name']], how='inner', on='store_cd').head(10)
P-037: Combinez en interne le bloc de données produit (df_product) et le bloc de données de catégorie (df_category), et affichez tous les éléments du bloc de données produit et 10 noms de sous-catégorie (category_small_name) du bloc de données de catégorie.
mine37.py
df=pd.merge(df_product,df_category[['category_major_cd', 'category_medium_cd','category_small_cd','category_small_name']]
,on=['category_major_cd', 'category_medium_cd','category_small_cd'],how='inner')
df.head(10)
'''Le modèle de réponse'''
pd.merge(df_product
, df_category[['category_major_cd', 'category_medium_cd','category_small_cd','category_small_name']]
, how='inner', on=['category_major_cd', 'category_medium_cd','category_small_cd']).head(10)
Eh bien, c'est ça.
P-038: Trouvez le montant total des ventes pour chaque client à partir du bloc de données client (df_customer) et du bloc de données de détail de réception (df_receipt). Cependant, pour les clients qui n'ont pas d'enregistrement d'achat, le montant des ventes doit être affiché à 0. En outre, les clients doivent cibler les personnes dont le code de genre (gender_cd) est féminin (1) et exclure les non-membres (identifiants clients commençant par "Z"). Seuls 10 résultats doivent être affichés.
J'ai l'habitude d'effacer le premier "Z". Ce que nous faisons cette fois est de créer une jointure externe gauche et de définir la valeur Null (Nan) sur 0.
Utilisez .fillna (0)
pour régler Nan sur 0 OK
mine38.py
df_cst=df_customer[df_customer.customer_id.str.contains('^[^Z]')].query("gender_cd == '1'")
df_rct=df_receipt.groupby('customer_id').agg({'amount':'sum'}).reset_index()
df=pd.merge(df_cst,df_rct,on='customer_id',how='left').fillna(0)
df.head(10)
'''Le modèle de réponse'''
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
df_tmp = df_customer.query('gender_cd == "1" and not customer_id.str.startswith("Z")', engine='python')
pd.merge(df_tmp['customer_id'], df_amount_sum, how='left', on='customer_id').fillna(0).head(10)
Dans la réponse du modèle, je fais un calcul puis je sélectionne (Z start exclusion et femelle), mais je fais d'abord une sélection puis je calcule.
P-039: Extrayez les 20 premiers clients avec le plus grand nombre de jours de vente et les 20 premiers clients avec le montant total des ventes le plus élevé du bloc de données du relevé de réception (df_receipt), et combinez-les complètement en externe. Cependant, les non-membres (identifiants clients commençant par «Z») doivent être exclus.
Ce problème était complètement faux et a pris beaucoup de temps. la première,
miss39.py
df=df_receipt[df_receipt.customer_id.str.contains('^[^Z]')]
df_day=df.groupby('customer_id').agg({'sales_ymd':'count'}).sort_values('sales_ymd',ascending=False).reset_index().head(20)
df_amo=df_amo.groupby('customer_id').agg({'amount':'sum'}).sort_values('amount',ascending=False).reset_index().head(20)
pd.merge(df_amo,df_day,on='customer_id',how='outer')
Je l'ai écrit comme ça et j'ai répondu en toute confiance.
Comme le contenu
--Top 20 clients avec le plus de jours de vente dans df_day
--Top 20 clients avec le montant total des ventes le plus élevé dans df_amo
J'avais l'intention de.
Mais pour df_receipt
―― "Même personne" "Même jour" "Différentes choses"
J'ai oublié que j'avais acheté des données, j'ai donc dû les rassembler en une seule ligne.
Donc, (Référence) Supprimer les lignes en double
df_day=df[~df.duplicated(subset=['customer_id', 'sales_ymd'])]
Ajouter
mine39.py
df=df_receipt[df_receipt.customer_id.str.contains('^[^Z]')]
df_day=df[~df.duplicated(subset=['customer_id', 'sales_ymd'])]
df_day=df_day.groupby('customer_id').agg({'sales_ymd':'count'}).sort_values('sales_ymd',ascending=False).reset_index().head(20)
df_amo=df_amo.groupby('customer_id').agg({'amount':'sum'}).sort_values('amount',ascending=False).reset_index().head(20)
pd.merge(df_amo,df_day,on='customer_id',how='outer')
'''Le modèle de réponse'''
df_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
df_sum = df_sum.query('not customer_id.str.startswith("Z")', engine='python')
df_sum = df_sum.sort_values('amount', ascending=False).head(20)
df_cnt = df_receipt[~df_receipt.duplicated(subset=['customer_id', 'sales_ymd'])]
df_cnt = df_cnt.query('not customer_id.str.startswith("Z")', engine='python')
df_cnt = df_cnt.groupby('customer_id').sales_ymd.count().reset_index()
df_cnt = df_cnt.sort_values('sales_ymd', ascending=False).head(20)
pd.merge(df_sum, df_cnt, how='outer', on='customer_id')
est devenu. (Je l'ai fait. C'était plus court que la réponse modèle)
P-040: Je voudrais savoir combien de données seront obtenues en combinant tous les magasins et tous les produits. Calculez le nombre de produits directs des magasins (df_store) et des produits (df_product).
mine40.py
len(df_store)*len(df_product)
** Oh non? ** **
mohan40.py
```Le modèle de réponse```
df_store_tmp = df_store.copy()
df_product_tmp = df_product.copy()
df_store_tmp['key'] = 0
df_product_tmp['key'] = 0
len(pd.merge(df_store_tmp, df_product_tmp, how='outer', on='key'))
Recommended Posts