簡體   English   中英

Pandas:划分2個不同大小的數據幀

[英]Pandas: Divide 2 data frames of different sizes

我有 2 個數據框 - df_TBdf_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_FXdf_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM