我有一个包含索引下限和上限的框架,具有相应的值,我试图匹配相应索引的值。我的框架由400.000行组成。我的框架的一个例子:
df1 = pd.DataFrame({'low':[4,7,8],'high':[6,7,21],'value':[10,15,20]})
df2 = pd.DataFrame({'index':[4,5,6,7,8,9]})
字符串
输出量:
low high value
0 4 6 10
1 7 7 15
2 8 21 20
型
现在我想把df1的value加到df2上,只要索引在low和high之间,结果如下:
index value
0 4 10
1 5 10
2 6 10
3 7 15
4 8 20
5 9 20
型
我试着用下面的帖子做一个intervalIndex:Searching a particular value in a range among two columns python dataframe
v = df1.loc[:, 'low':'high'].apply(tuple, 1).tolist()
idx = pd.IntervalIndex.from_tuples(v, 'both')
df2['value'] = df1.iloc[idx.get_indexer(df2['index'].values), 'value'].values
型
但是我的间隔保持重叠,我删除了重复的版本,但我仍然需要删除一些重叠的间隔。一种方法是使用for循环:
[idx.overlaps(x) for x in idx]
型
但是这需要很多时间,而且每次我的记忆都失败了。有没有什么快速的方法可以找到重叠的时间间隔?
4条答案
按热度按时间px9o7tmv1#
这里有一个解决方案 * 假设索引是排序的 *,创建一个
dict
与limit的,并使用dict对框架,然后使用ffill()
来填补Map创建的空白。个字符
cetgtptt2#
使用
pd.concat()
构建一个要加入的框架字符串
输出
型
xkrw2x1b3#
这个帖子已经有一段时间没有被打开了。但是我最近遇到了一个类似的问题。我发现这个问题已经用Pandas IntervalIndex解决了。
字符串
它返回
df2
的期望结果:型
xtfmy6hx4#
conditional_join是一个扩展性很好的有效选项,它可以有效地处理不等式连接:
字符串