這是如下所示的初始表。
| 客戶 ID | 一月交易費 | 一月交易費 | 一月產品費 | 一月產品費 | 二月交易費 | 二月交易費 | 二月產品費 | 二月產品費 |
|---|---|---|---|---|---|---|---|---|
| 港幣 | 美元 | 港幣 | 美元 | 港幣 | 美元 | 港幣 | 美元 | |
| 100103 | 100 | 20 | 21 | 24 | 215 | 55 | 253 | 25 |
| 100104 | 200 | 30 | 31 | 34 | 315 | 65 | 353 | 35 |
我想將表格從上面轉換為下面的預期結果。
| 客戶 ID | 時期 | 型別 | 外匯 | 價錢 |
|---|---|---|---|---|
| 100103 | 202201 | 手續費 | 港幣 | 100 |
| 100103 | 202201 | 手續費 | 美元 | 20 |
| 100103 | 202201 | 產品費 | 港幣 | 21 |
| 100103 | 202201 | 產品費 | 美元 | 24 |
| 100103 | 202202 | 手續費 | 港幣 | 215 |
| 100103 | 202202 | 手續費 | 美元 | 55 |
| 100103 | 202202 | 產品費 | 港幣 | 253 |
| 100103 | 202202 | 產品費 | 美元 | 25 |
| 100104 | 202201 | 手續費 | 港幣 | 200 |
| 100104 | 202201 | 手續費 | 美元 | 30 |
| 100104 | 202201 | 產品費 | 港幣 | 31 |
| 100104 | 202201 | 產品費 | 美元 | 34 |
| 100104 | 202202 | 手續費 | 港幣 | 315 |
| 100104 | 202202 | 手續費 | 美元 | 65 |
| 100104 | 202202 | 產品費 | 港幣 | 353 |
| 100104 | 202202 | 產品費 | 美元 | 35 |
我對匯入資料的編碼如下
import pandas as pd
test=pd.DataFrame({'Cust ID':['','100103','100104'],'Jan Transaction Fee':['HKD',100,200],'Jan Transaction Fee.1':['USD',20,30],\
'Jan Product Fee':['HKD',21,31],'Jan Product Fee.1':['USD',24,34],
'Feb Transaction Fee':['HKD',215,315],'Feb Transaction Fee.1':['USD',55,65],
'Feb Product Fee':['HKD',253,353],'Feb Product Fee.1':['USD',25,35]})
test
有沒有辦法使用 Python 來實作預期的結果?
uj5u.com熱心網友回復:
這是一個復雜的重塑。
注意。我忽略了使用 .1 洗掉的 '.1' test.columns = test.columns.map(lambda s: s.strip('.1'))。
df = (test
.T.set_index(0, append=True).T
.set_index([('Cust ID', '')])
.stack()
.rename_axis(index=['Cust ID', 'FX'], columns='Type')
.stack()
.reset_index(name='Price')
)
df[['Period', 'Type']] = df['Type'].str.split(n=1, expand=True)
df['Period'] = pd.to_datetime('2022 ' df['Period']).dt.strftime('%Y%m')
輸出:
Cust ID FX Type Price Period
0 100103 HKD Transaction Fee 100 202201
1 100103 USD Product Fee 25 202202
2 100103 USD Transaction Fee 55 202202
3 100103 USD Product Fee 24 202201
4 100103 USD Transaction Fee 20 202201
5 100104 HKD Transaction Fee 200 202201
6 100104 USD Product Fee 35 202202
7 100104 USD Transaction Fee 65 202202
8 100104 USD Product Fee 34 202201
9 100104 USD Transaction Fee 30 202201
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456652.html
上一篇:基于另一列向列添加值
