[英]Pandas: Divide 2 data frames of different sizes
我有 2 個數據框 - df_TB
和df_FX
。 我想保留df_TB
中的所有列,並將所有df_TB.values
除以相應的df_FX.values
我在下面嘗試過,這導致所有內容都為NaN
index_FX = ['Year', 'PL/BS', 'Currency']
df_TB = df_TB.set_index(index_FX)
df_TB = df_TB / df_FX
並且還在下面嘗試過,這也導致所有內容都為 NaN ......雖然 'df_TB2' 確實產生了我的預期。 但我似乎無法服用 df_TB / df_TB2。 我也無法將它們相乘(認為這可以解決任何除以零錯誤)
df_TB2 = pd.DataFrame(index=df_TB.index).join(df_FX)
df_TB = df_TB / df_TB2
我對 Python 和 Pandas 非常陌生(也是 Stack Overflow 的新手)。 非常感謝您對此的任何幫助。 謝謝!
df_TB:
年 | 實體 | PL/BS | MAM賬戶 | 個人電腦 | 貨幣 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|---|---|---|---|---|
2020 | 6156 | 學士學位 | 1002 | X6156901 | 澳元 | -100 | -100 | -100 | -100 | -100 |
2019 | 6154 | 學士學位 | 1031 | X6154901 | 美元 | -642344.73 | -642344.73 | -642344.73 | -642344.73 | -642344.73 |
2020 | 6157 | 學士學位 | 1031 | X6157002 | 英鎊 | 2849621.42 | 2849621.42 | 2849621.42 | 2849621.42 | 2849621.42 |
2019 | 6227 | 學士學位 | 1031 | X6227901 | 新元 | 659535.71 | 659535.71 | 659535.71 | 659535.71 | 659535.71 |
2020 | 6156 | 學士學位 | 1031 | X6156999 | 澳元 | -3604681.34 | -3604681.34 | -3604681.34 | -3604681.34 | -3604681.34 |
2019 | 6154 | PL | 2288 | X6154002 | 美元 | 3588.59 | 3588.59 | 4843.88 | 4843.88 | 4843.88 |
2019 | 6227 | PL | 2828 | X6227002 | 新元 | -299.05 | -398.73 | -533.29 | -667.84 | -802.39 |
2019 | 6157 | PL | 4001 | X6157002 | 英鎊 | 0 | 0 | 500 | 0 | 0 |
2020 | 6377 | PL | 4001 | X6377006 | 日元 | 0 | 0 | 0 | 0 | 1000 |
df_FX:
年 | PL/BS | 貨幣 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|---|---|
2019 | 學士學位 | 澳元 | 1.3938 | 1.3751 | 1.4087 | 1.4113 | 1.4183 |
2019 | 學士學位 | 英鎊 | 0.7946 | 0.7621 | 0.7538 | 0.7523 | 0.7667 |
2019 | 學士學位 | 日元 | 113.3823 | 108.821 | 111.3249 | 111.4868 | 111.3667 |
2019 | 學士學位 | 新元 | 1.3764 | 1.3461 | 1.3517 | 1.353 | 1.3602 |
2019 | 學士學位 | 美元 | 1 | 1 | 1 | 1 | 1 |
2019 | PL | 澳元 | 0 | 1.3987 | 1.3997 | 1.4028 | 1.4044 |
2019 | PL | 英鎊 | 0 | 0.7759 | 0.7724 | 0.7698 | 0.768 |
2019 | PL | 日元 | 0 | 109.0216 | 109.6882 | 110.0554 | 110.543 |
2019 | PL | 新元 | 0 | 1.3566 | 1.3554 | 1.3555 | 1.3553 |
2019 | PL | 美元 | 0 | 1 | 1 | 1 | 1 |
2020 | 學士學位 | 澳元 | 1.4529 | 1.4946 | 1.5342 | 1.6124 | 1.5329 |
2020 | 學士學位 | 英鎊 | 0.7503 | 0.7572 | 0.7802 | 0.8133 | 0.7948 |
2020 | 學士學位 | 日元 | 109.3067 | 108.3296 | 107.9176 | 107.5538 | 106.9397 |
2020 | 學士學位 | 新元 | 1.3541 | 1.3648 | 1.3933 | 1.4151 | 1.4098 |
2020 | 學士學位 | 美元 | 1 | 1 | 1 | 1 | 1 |
2020 | PL | 澳元 | 0 | 1.4581 | 1.4775 | 1.4886 | 1.5384 |
2020 | PL | 英鎊 | 0 | 0.7645 | 0.7679 | 0.7701 | 0.788 |
2020 | PL | 日元 | 0 | 109.2678 | 109.6086 | 108.8845 | 108.6383 |
2020 | PL | 新元 | 0 | 1.3513 | 1.3691 | 1.3734 | 1.3946 |
2020 | PL | 美元 | 0 | 1 | 1 | 1 | 1 |
預期結果
年 | 實體 | PL/BS | MAM賬戶 | 個人電腦 | 貨幣 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|---|---|---|---|---|
2020 | 6156 | 學士學位 | 1002 | X6156901 | 澳元 | -68.83 | -66.91 | -65.18 | -62.02 | -65.24 |
2019 | 6154 | 學士學位 | 1031 | X6154901 | 美元 | -642344.73 | -642344.73 | -642344.73 | -642344.73 | -642344.73 |
2020 | 6157 | 學士學位 | 1031 | X6157002 | 英鎊 | 3797976.04 | 3763366.9 | 3652424.28 | 3503776.49 | 3585331.43 |
2019 | 6227 | 學士學位 | 1031 | X6227901 | 新元 | 479174.45 | 489960.41 | 487930.54 | 487461.72 | 484881.42 |
2020 | 6156 | 學士學位 | 1031 | X6156999 | 澳元 | -2481025.08 | -2411803.39 | -2349551.13 | -2235599.94 | -2351543.7 |
2019 | 6154 | PL | 2288 | X6154002 | 美元 | 鈉 | 3588.59 | 4843.88 | 4843.88 | 4843.88 |
2019 | 6227 | PL | 2828 | X6227002 | 新元 | 鈉 | -293.92 | -393.46 | -492.69 | -592.04 |
2019 | 6157 | PL | 4001 | X6157002 | 英鎊 | 鈉 | 0 | 647.33 | 0 | 0 |
2020 | 6377 | PL | 4001 | X6377006 | 日元 | 鈉 | 0 | 0 | 0 | 9.2 |
首先使df_FX
和df_TB
的長度相等,因此我們正在df_FX
中進行更改,這可以通過reindex()
方法完成:-
df_FX=df_FX.reindex(df_TB.index)
最后,我們使用round()
方法,以便我們可以將列的划分四舍五入到小數點后 2 位:-
df_TB[['0','1','2','3','4']]=round(df_TB[['0','1','2','3','4']]/df_FX[['0','1','2','3','4']],2)
現在您打印df_TB
然后您將獲得預期的 output
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.