繁体   English   中英

Python pandas - 根据 dataframe1 中的另一列将 dataframe1 中的列与 dataframe2 中的列分开

[英]Python pandas - Divide a column in dataframe1 with a column in dataframe2 based on another column in dataframe1

日期框1

df = pd.DataFrame(SQL_Query, columns=[ X,Y . . . . Currency,Amount] 

Index         X             Y  ...         Currency          Amount
0             74            1  ...         USD               100
1             75            1  ...         EUR               5000
2             76            1  ...         AUD               300
3             79            1  ...         EUR               750

[1411137 rows x 162 columns]

大型 SQL 查询,因此我避免写出所有列。

df1=pd.read_excel(r`FX_EUR.xlsx)

Index       Currency      FX
0             AUD      1.61350
1             BGN      1.95580
2             BRL      4.51450
3             CAD      1.45830
4             CHF      1.09280

因此,我想要实现的是在 DF1 中进行查找以查看使用了哪种货币,然后将“DF1 Amount”列与“DF2 FX”列分开,并以此为 DF1 中的所有行。 通过创建第三个 DF3 或创建一个名为 Amount_EUR 的新列 i DF1。

关于如何编写此代码的任何想法?

您可以使用map来应用转换 -

import pandas as pd
df = pd.DataFrame({"Currency": ['USD', 'EUR', 'AUD', 'EUR'], "Amount": [100, 5000, 300, 750]})

df1 = pd.DataFrame({"Currency": ["AUD", "BGN", "BRL", "CAD", "EUR"], "FX": [1.6, 1.9, 4.5, 1.5, 1.1]})
df1 = df1.set_index("Currency")

df['FX'] = df['Currency'].map(df1.FX)
df['FX_Adj_Amt'] = df['Amount'].div(df['FX'])

df
#  Currency  Amount   Fx   FX_Adj_Amt
#0      USD     100  NaN          NaN
#1      EUR    5000  1.1  4545.454545
#2      AUD     300  1.6   187.500000
#3      EUR     750  1.1   681.818182

您可以使用 merge 来构建一个包含与df具有相同索引的正确FX (相同Currency )的系列。 那么除法是微不足道的:

fx = df.merge(df1, 'left', on='Currency')['FX']
df.loc[~ fx.isna(),'EUR_Amount'] = df.loc[~ fx.isna()]['Amount']/fx.loc[~ fx.isna()]

使用您的示例数据,它提供:

        X  Y  ... Currency  Amount  EUR_Amount
Index                                         
0      74  1  ...      USD     100         NaN
1      75  1  ...      EUR    5000         NaN
2      76  1  ...      AUD     300  185.931205
3      79  1  ...      EUR     750         NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM