我有一个名为keys的有序Pandas 数据帧,其中包含列group_1
、group_2
、...、group_N
和number
.
我有第二个有序的Pandas 数据帧,名为fill_in,具有相同的列,但值不同.对于fill_in中的每一行,我希望找到keys中具有1)相同的group
个值和2)number
中小于fil_in的当前number
的最大值的对应行的索引.如果在keys中找不到A fill_in的组,则它应该输出np.nan
.如果number
中的值低于keys的组中的任何值,它也应该输出np.nan
.
以玩具为例,考虑以下keys、fill_in和预期输出:
keys = pd.DataFrame({'group1':[1, 1, 1, 1, 2, 2],
'group2':[5, 5, 5, 7, 9, 9],
'number': [19,35,61,5, 105,300]})
fill_in = pd.DataFrame({'group1':[1, 1, 2, 5],
'group2':[5, 5, 9, 9],
'number': [0,43.2,900.3,14]})
expected_output = [np.nan, 1, 5, np.nan]
我已经解决了这个问题,我捏了捏鼻子,在Pandas 数据帧上写了一个for
循环.毫不奇怪,我的解决方案非常慢.有没有办法通过Pandas 手术来解决这个问题?