我有两个数据名:
df1 = pd.DataFrame({
'from': [0, 2, 8, 26, 35, 46],
'to': [2, 8, 26, 35, 46, 48],
'int': [2, 6, 18, 9, 11, 2]})
df2 = pd.DataFrame({
'from': [0, 2, 8, 17, 34],
'to': [2, 8, 17, 34, 49],
'int': [2, 6, 9, 17, 15]})
我想创建一个如下所示的新数据框:
df = pd.DataFrame({
'from': [0, 2, 8, 17, 26, 34, 35, 46, 48],
'to': [2, 8, 17, 26, 34, 35, 46, 48, 49],
'int': [2, 6, 9, 9, 8, 1, 11, 2, 1]})
我已经尝试过标准合并脚本,但无法将 df1 或 df2 中包含较高“from”和“to”数字的行拆分为较小的行。
在这里寻找方向。
首先,组合来自
from
和 to
的所有唯一 df1
和 df2
值来创建一组断点:
breakpoints = set(df1['from']).union(df1['to']).union(df2['from']).union(df2['to'])
breakpoints = sorted(breakpoints)
在示例中,这是
[0, 2, 8, 17, 26, 34, 35, 46, 48, 49]
。现在,使用这些 from
和 to
值创建一个新数据框,然后计算间隔:
new_df = pd.DataFrame({'from': breakpoints[:-1], 'to': breakpoints[1:]})
new_df['int'] = new_df['to'] - new_df['from']
结果:
from to int
0 0 2 2
1 2 8 6
2 8 17 9
3 17 26 9
4 26 34 8
5 34 35 1
6 35 46 11
7 46 48 2
8 48 49 1