pandas 如何有效地合并这些范围值上的 Dataframe ?

oewdyzsn  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(145)

我有两个dataframe:

section_headers =
   start_sect_  end_sect_
0            0         50
1          121        139
2          221        270

sentences =
    start_sent_  end_sent_
0             0         50
1            56         76
2            77         85
3            88        111
4           114        120
5           121        139
6           221        270

我正在尝试合并属于每个section_header下的sentences...
当句子的start_sent_大于或等于section_header的start_sect_并且小于或等于下一个section_header的start_sect_时,句子属于section_header下,等等。
考虑到这一点,我想要的输出是:

merge =
        start_sent_  end_sent_     start_sect_
    0             0         50               0
    1            56         76               0
    2            77         85               0
    3            88        111               0
    4           114        120               0
    5           121        139               121
    6           221        270               221

我最初将其转换为字典,然后根据条件创建一个新的 Dataframe ,但我处理的数据量非常大,并且需要永远迭代记录。
我正在尝试设计一种方法,不必迭代这些记录来合并数据。我在这里尝试了广播方法Solution 2: Numpy Solution for large dataset,但是由于这种方法不允许索引数组,所以它不起作用。否则,它对我拥有的另外两个合并用例工作得很好。

8zzbczxx

8zzbczxx1#

这看起来像是merge_asof的用法。
使用direction="backward"section_headers作为右DF,合并将在<=上进行:

pd.merge_asof(sentences, section_headers["start_sect_"],
              left_on="start_sent_", right_on="start_sect_",
              direction="backward")

#Out[]: 
#   start_sent_  end_sent_  start_sect_
#0            0         50            0
#1           56         76            0
#2           77         85            0
#3           88        111            0
#4          114        120            0
#5          121        139          121
#6          221        270          221

相关问题