Python 检查数据帧中的vaue是否存在于具有条件的另一个数据帧中
我有一个熊猫数据帧,其结构类似于:Python 检查数据帧中的vaue是否存在于具有条件的另一个数据帧中,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据帧,其结构类似于: Application | Account | Application_Date 1 | 444444 | 10/01/2018 2 | 444444 | 09/01/2018 3 | 555555 | 10/01/2018 以及一个不同的数据帧,其结构如下: Case | Account | Case_Date 1 | 444444 | 09/01/2
Application | Account | Application_Date
1 | 444444 | 10/01/2018
2 | 444444 | 09/01/2018
3 | 555555 | 10/01/2018
以及一个不同的数据帧,其结构如下:
Case | Account | Case_Date
1 | 444444 | 09/01/2018
2 | 444444 | 11/01/2018
3 | 444444 | 10/01/2018
4 | 555555 | 07/01/2018
我想检查第一个数据帧中的帐户是否存在于第二个数据帧中,仅当案例_日期大于或等于应用程序_日期时,然后在第一个数据帧的列中获取输出以及案例编号,如:
Application | Account | Application_Date | Case_Exists | Case_Number
1 | 444444 | 10/01/2018 | Y | 2, 3
2 | 444444 | 09/01/2018 | Y | 1, 2, 3
3 | 555555 | 10/01/2018 | N |
你能给我个建议吗
谢谢大家! 这是一个有点复杂的解决方案,但它能让你达到目的:
应用程序
和帐户
分组,并获取唯一案例Y
分配给非空值(发现案例时):>>> df1
Application Account Application_Date
0 1 444444 10/01/2018
1 2 444444 09/01/2018
2 3 555555 10/01/2018
>>> df2
Case Account Case_Date
0 1 444444 09/01/2018
1 2 444444 11/01/2018
2 3 444444 10/01/2018
3 4 555555 07/01/2018
# set to datetime
df1['Application_Date'] = pd.to_datetime(df1['Application_Date'])
df2['Case_Date'] = pd.to_datetime(df2['Case_Date'])
# first merge
merged = df2.merge(df1)
# loc and groupby
cases = (merged.loc[merged['Case_Date'] >= merged['Application_Date']]
.groupby(['Account','Application'])['Case']
.unique())
# merge back
final = (cases.to_frame('Case_Number').merge(df1,left_index=True,
right_on=['Account', 'Application'],
how='outer')
# Following line is just to re-adjust column order
[['Application','Account','Application_Date','Case_Number']])
# assign Y and N
final['Case_Exists'] = final.Case_Number.notnull().map({True:'Y',False:'N'})
>>> final
Application Account Application_Date Case_Number Case_Exists
0 1 444444 2018-10-01 [2, 3] Y
1 2 444444 2018-09-01 [1, 2, 3] Y
2 3 555555 2018-10-01 NaN N