comment ajouter différentes valeurs de colonne et les convertir en mois numériques


Tony Tang

J'ai un tableau ci-dessous.

Questions mises à jour (ajout d'une colonne supplémentaire appelée ID client

ID client Frais de transaction janvier Frais de transaction janvier Frais de produit de janvier Frais de produit de janvier Frais de transaction de février Frais de transaction de février Frais de produit de février Frais de produit de février
HKD USD HKD USD HKD USD HKD USD
100103 100 20 21 24 215 55 253 25
100104 200 30 31 34 315 65 353 35

Je voudrais convertir le tableau ci-dessus en résultat attendu ci-dessous.

ID client Point final Taper Effets Prix
100103 202201 Frais de transaction HKD 100
100103 202201 Frais de transaction USD 20
100103 202201 Frais de produit HKD 21
100103 202201 Frais de produit USD 24
100103 202202 Frais de transaction HKD 215
100103 202202 Frais de transaction USD 55
100103 202202 Frais de produit HKD 253
100103 202202 Frais de produit USD 25
100104 202201 Frais de transaction HKD 200
100104 202201 Frais de transaction USD 30
100104 202201 Frais de produit HKD 31
100104 202201 Frais de produit USD 34
100104 202202 Frais de transaction HKD 315
100104 202202 Frais de transaction USD 65
100104 202202 Frais de produit HKD 353
100104 202202 Frais de produit USD 35

Dans mes pensées, je voudrais concilier les frais de transaction et la devise, puis diviser les mots plus tard, mais j'ai déjà rencontré un problème en faisant les colonnes ajoutées. Mon codage est ci-dessous

import pandas as pd 


test=pd.DataFrame({'Cust ID':['','','100103','100104'],'0':['Jan Transaction Fee','HKD',100,200],'1':['Jan Transaction Fee','USD',20,30],\
                  '2':['Jan Product Fee','HKD',21,31],'3':['Jan Product Fee','USD',24,34],
                  '4':['Feb Transaction Fee','HKD',215,315],'5':['Feb Transaction Fee','USD',55,65],
                  '6':['Feb Product Fee','HKD',253,353],'7':['Feb Product Fee','USD',25,35]})

test

df_1=test[['0','1']].iloc[:2]
df_1['test']=df_1['0'].str.cat(sep=' ')
df_1['test_1']=df_1['1'].str.cat(sep=' ')
df_1['test']=pd.concat([df_1['test_1']])
df_1

Le résultat final est le suivant

entrez la description de l'image ici

Ma colonne de test supprime les frais de transaction de janvier HKD, et seuls les frais de transaction de janvier USD sont restés sous la colonne de test. Est-ce que quelqu'un me guide comment ajouter les valeurs sous la colonne test_1 à la colonne test afin qu'il y ait quatre lignes tgt? Ou existe-t-il un moyen de faire le résultat attendu de manière beaucoup plus simple (en utilisant n'importe quelle technique de transposition).

Je ne suis qu'un débutant en Python. J'espère que quelqu'un peut aider. Merci

Mozway

IIUC, vous pouvez définir des étiquettes, transposeet splitla colonne Type dans Type et période (en retravaillant la date) :

df = test.set_axis(['Type', 'FX', 'Price']).T
# or renaming by numerical index
# df = test.rename({0: 'Type', 1: 'FW', 2: 'Price'}).T

df[['Period', 'Type']] = df['Type'].str.split(n=1, expand=True)

df['Period'] = pd.to_datetime('2022 '+df['Period']).dt.strftime('%Y%m')

sortir:

              Type   FW Price  Period
0  Transaction Fee  HKD   100  202201
1  Transaction Fee  USD    20  202201
2      Product Fee  HKD    21  202201
3      Product Fee  USD    24  202201
4  Transaction Fee  HKD   215  202202
5  Transaction Fee  USD    55  202202
6      Product Fee  HKD   253  202202
7      Product Fee  USD    25  202202
Période sous forme d'entier AAAAMMJJ avec JJ comme FinMois
df['Period'] = (pd.to_datetime('2022 '+df['Period'])
                  .add(pd.offsets.MonthEnd())
                  .dt.strftime('%Y%m%d')
                  .astype(int)
               )

Articles connexes