如果问题微不足道,我深表歉意,但作为一个Python新手,我无法找到正确的解决方案。
我有两个数据帧,我需要向第一个数据帧添加一列,如果第一个数据帧的某个值位于第二个数据帧的两个值之间,则该列为 true,否则为 false。
例如:
first_df = pd.DataFrame({'code1':[1,1,2,2,3,1,1],'code2':[10,22,15,15,7,130,2]})
second_df = pd.DataFrame({'code1':[1,1,2,2,3,1,1],'code2_start':[5,20,11,11,5,110,220],'code2_end':[15,25,20,20,10,120,230]})
first_df
code1 code2
0 1 10
1 1 22
2 2 15
3 2 15
4 3 7
5 1 130
6 1 2
second_df
code1 code2_end code2_start
0 1 15 5
1 1 25 20
2 2 20 11
3 2 20 11
4 3 10 5
5 1 120 110
6 1 230 220
对于第一个数据帧中的每一行,我应该检查 code2 列中报告的值是否位于第二个数据帧 secondary_df 的行标识的可能范围之一之间,例如:
在第 1 行first_df
code1=1
and code2=22
检查second_df
我有 4 行code1=1
, rows 0,1,5
and 6
, 价值code2=22
位于由 确定的区间内code2_start=20
and code2_end=25
所以函数应该返回True
.
考虑一个函数应返回 False 的示例,
在第 5 行first_df
code1=1
and code2=130
但不存在包含 130 的区间,其中code1=1
我尝试过使用这个功能
def check(first_df,second_df):
for i in range(len(first_df):
return ((second_df.code2_start <= first_df.code2[i]) & (second_df.code2_end <= first_df.code2[i]) & (second_df.code1 == first_df.code1[i])).any()
并将其向量化
first_df['output'] = np.vectorize(check)(first_df, second_df)
但显然没有成功。
我很高兴您能提供任何意见。
thx.
A.
作为一个实际的例子:
first_df.code1[0] = 1
因此我需要搜索所有实例中的第二个
second_df.code1 == first_df.code1[0]
0 True
1 True
2 False
3 False
4 False
5 True
6 True
对于状态为 True 的实例 0、1、5、6,我需要检查该值是否
first_df.code2[0]
10
介于由确定的范围之一之间
second_df[second_df.code1 == first_df.code1[0]][['code2_start','code2_end']]
code2_start code2_end
0 5 15
1 20 25
5 110 120
6 220 230
由于first_df.code2[0]的值是10,它在5到15之间,所以第0行标识的范围因此我的函数应该返回True。在first_df.code1[6]的情况下,值仍然是1,因此范围表仍然与上面相同,但是first_df.code2[6]在这种情况下是2,并且没有包含2的区间,因此结果应该是False 。