comment ajouter différentes valeurs de colonne et les convertir en mois numériques
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
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
IIUC, vous pouvez définir des étiquettes, transpose
et split
la 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)
)