如何合并多列数据帧并拆分行?

问题描述 投票:0回答:1

我有两个数据名:

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”数字的行拆分为较小的行。

在这里寻找方向。

pandas dataframe merge combine
1个回答
0
投票

首先,组合来自

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
© www.soinside.com 2019 - 2024. All rights reserved.