首页 > 解决方案 > 将计算列添加到基于其他的数据框

问题描述

我正在尝试根据包含其他数据框的条件在数据框中添加计算列。

例子:

我有一个数据框用户,其中包含:

Out[4]:
                                        UserID  Active  BaseSalaryCOP  BaseSalaryUSD    FromDate      ToDate
0  557058:36103848-2606-4d87-9af8-b0498f1c6713    True        9405749        2475.20  05/11/2020  05/11/2021
1  557058:36103848-2606-4d87-9af8-b0498f1c6713    True        3831329        1008.24  05/11/2020  04/11/2021
2  557058:7df66ef4-b04d-4ce9-9cdc-55751909a61e    True        3775657         993.59  05/11/2020  05/11/2021
3  557058:b0a4e46c-9bfe-439e-ae6e-500e3c2a87e2    True        9542508        2511.19  05/11/2020  05/11/2021
4  557058:b25dbdb2-aa23-4706-9e50-90b2f66b60a5    True        8994035        2366.85  05/11/2020  05/11/2021

我还有另一个名为 Rate 的包含 UserId。我想添加一个计算列来添加 18 之间的 BaseSalaryUSD Divide,其中 USer ID 匹配和 ToDate 匹配。

类似于(如果日期与 toDate 和 USerID 匹配,则添加一个包含 User["BaseSalaryUSD"] / 18 的新列):

Out[5]:
                                     AccountID           Date      rate
0  557058:36103848-2606-4d87-9af8-b0498f1c6713     04/21/2021    137.51
2  557058:7df66ef4-b04d-4ce9-9cdc-55751909a61e     05/11/2021     55.19
3  557058:b0a4e46c-9bfe-439e-ae6e-500e3c2a87e2     05/11/2021    139.51
4  557058:b25dbdb2-aa23-4706-9e50-90b2f66b60a5     05/11/2021    131.49

任何想法?

谢谢

标签: pythonpandasdataframe

解决方案


通过两个数据框使用外连接,然后过滤Series.between并除以列Series.div

Rate['Date'] = pd.to_datetime(Rate['Date'])
Users['FromDate'] = pd.to_datetime(Users['FromDate'])
Users['ToDate'] = pd.to_datetime(Users['ToDate'])

df = Users.merge(Rate.rename(columns={'AccountID':'UserID'}), on='UserID', how='outer')
df = df[df['Date'].between(df['FromDate'], df['ToDate'])]
df['new'] = df['BaseSalaryUSD'].div(18)
print (df)
                                        UserID  Active  BaseSalaryCOP  \
0  557058:36103848-2606-4d87-9af8-b0498f1c6713    True        9405749   
2  557058:7df66ef4-b04d-4ce9-9cdc-55751909a61e    True        3775657   
3  557058:b0a4e46c-9bfe-439e-ae6e-500e3c2a87e2    True        9542508   
4  557058:b25dbdb2-aa23-4706-9e50-90b2f66b60a5    True        8994035   

   BaseSalaryUSD   FromDate     ToDate       Date    rate         new  
0        2475.20 2020-05-11 2021-05-11 2021-04-21  137.51  137.511111  
2         993.59 2020-05-11 2021-05-11 2021-05-11   55.19   55.199444  
3        2511.19 2020-05-11 2021-05-11 2021-05-11  139.51  139.510556  
4        2366.85 2020-05-11 2021-05-11 2021-05-11  131.49  131.491667 

推荐阅读