gpt4 book ai didi

python - 如何根据 Python 中另一个数据框的关系为变量赋值

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:16 25 4
gpt4 key购买 nike

我的问题是我有一个数据框,其中包含每种类型的所有开始日期和结束日期以及相应的 ID。我想使用这个数据框根据日期将 id 分配给另一个数据框。具体来说,如果第二个数据帧中的日期介于第一个数据帧的开始日期和结束日期之间,则它将使用与第一个数据帧相同的 ID 进行签名。

#Here are two data frames
m1=pd.DataFrame({'type':['A','A','A','B','B','B'],
'id':[1,2,3,1,2,3],
'startdate':[20120201,20120301,20130401,20130301,20130501,20140601],
'enddate':[20120218,20120324,20130425,20130312,20130521,20140706]})

m2=pd.DataFrame({'type':['A','A','B','B'],
'pin':[12,33,25,47],
'date':[20120213,20130411,20130504,20140704]})

#ideally the result should be

m3=pd.DataFrame({'type':['A','A','B','B'],
'pin':[12,33,25,47],
'date':[20120213,20130411,20130504,20140704],
'id':[1,3,2,3]})

我想不出更好的方法来做到这一点。由于有数百万条记录,我需要一种更有效的方式来运行代码。有任何想法吗?非常感谢!

最佳答案

这是我对您问题的解决方案。

实际上,我将尝试使用合并/连接将 m1 和 m2 连接到单个数据帧中。

获得合并的数据帧后,我将进行测试以确保“日期”列在“开始日期”和“结束日期”内失败

因此你的代码将如下所示

## merged dataframe
df_merged = pd.merge(m2, m1, how='inner', left_on='type', right_on='type')

## create function to check that date fails between start and end date
f = lambda x : x if x['date'] > x['startdate'] and x['date'] < x['enddate'] else None

## apply function to dataframe
df_merged=df_merged.apply(f, axis=1)

## drop na values
df_merged.dropna()

关于python - 如何根据 Python 中另一个数据框的关系为变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com