Python允许在不更改顺序的情况下合并两个数据帧

Python允许在不更改顺序的情况下合并两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个熊猫数据帧,一个是df1和shape=(35,9),另一个是df2和shape=(12,9),我想合并它们 df2的行索引为: RangeIndex(start=1, stop=13, step=1) df1的行索引为: Int64Index([ 2, 10021, 10022, 10023, 10024, 3, 10021, 10022, 10023, 10024, 4, 10021, 10022, 10023, 10024, 5, 10

我有两个熊猫数据帧,一个是df1和shape=(35,9),另一个是df2和shape=(12,9),我想合并它们

df2的行索引为:

RangeIndex(start=1, stop=13, step=1)
df1的行索引为:

Int64Index([    2, 10021, 10022, 10023, 10024,     3, 10021, 10022, 10023,
        10024,     4, 10021, 10022, 10023, 10024,     5, 10021, 10022,
        10023, 10024,     6, 10021, 10022, 10023, 10024,     7, 10021,
        10022, 10023, 10024,     8, 10021, 10022, 10023, 10024],
       dtype='int64')
我希望合并这两个数据帧,以便生成的数据帧具有以下索引:

Int64Index([1,2,10021,10022,10023,10024, 3, 10021, 10022, 10023,
        10024,     4, 10021, 10022, 10023, 10024,     5, 10021, 10022,
        10023, 10024,     6, 10021, 10022, 10023, 10024,     7, 10021,
        10022, 10023, 10024,     8, 10021, 10022, 10023, 10024, 9, 10, 11, 12],
       dtype='int64')

我想您正在寻找一个
外部联接

import pandas as pd
idx1 = [    2, 10021, 10022, 10023, 10024,     3, 10021, 10022, 10023,
        10024,     4, 10021, 10022, 10023, 10024,     5, 10021, 10022,
        10023, 10024,     6, 10021, 10022, 10023, 10024,     7, 10021,
        10022, 10023, 10024,     8, 10021, 10022, 10023, 10024]
df1 = pd.DataFrame(data={'a': range(len(idx1))},
                   index=idx1)


df2 = pd.DataFrame(data={'b': range(1,13)},
                   index=range(1,13))

result_df = pd.merge(df1, df2, how='outer', left_index=True, right_index=True)
result_df.index
Int64Index([    1,     2,     3,     4,     5,     6,     7,     8,     9,
               10,    11,    12,    13, 10021, 10021, 10021, 10021, 10021,
            10021, 10021, 10022, 10022, 10022, 10022, 10022, 10022, 10022,
            10023, 10023, 10023, 10023, 10023, 10023, 10023, 10024, 10024,
            10024, 10024, 10024, 10024, 10024],
          dtype='int64')
试试这个:

import pandas as pd
import numpy as np

desired_idx = [1, 2, 10021, 10022, 10023, 10024, 3, 10021, 10022, 10023,
               10024, 4, 10021, 10022, 10023, 10024, 5, 10021, 10022,
               10023, 10024, 6, 10021, 10022, 10023, 10024, 7, 10021,
               10022, 10023, 10024, 8, 10021, 10022, 10023, 10024, 9, 10, 11, 12]

idx1 = [2, 10021, 10022, 10023, 10024, 3, 10021, 10022, 10023,
        10024, 4, 10021, 10022, 10023, 10024, 5, 10021, 10022,
        10023, 10024, 6, 10021, 10022, 10023, 10024, 7, 10021,
        10022, 10023, 10024, 8, 10021, 10022, 10023, 10024]

df1 = pd.DataFrame(np.random.random((35,9)), index=idx1)
df2 = pd.DataFrame(np.random.random((12,9)), index=range(1,13))

df_merge = pd.merge(df1, df2, how='outer', left_index=True, right_index=True)\
             .reset_index().drop_duplicates(subset='index')

df = pd.DataFrame([], columns=df_merge.columns)

for i, idx in enumerate(desired_idx):
    df.loc[i] = df_merge[df_merge['index'] == idx].values.flatten()

df.set_index('index', inplace=True)
df.index = df.index.astype(int)
df

我从下面的答案继续工作。我们必须删除重复项,然后遍历所需的索引,并将它们附加到新的数据帧中。我尝试了许多不同的方法,这是唯一有效的方法,因为熊猫在使用内置函数时会对索引进行排序。

为什么来自df1和df2的索引具有相同的名称?例如,df1有一个索引
2
,df2也有一个索引
2
。那么这些行是一样的吗?那么,当df1的索引与df2的索引相同时,合并冲突会发生什么呢?似乎您只想将df2的索引
1、9、10、11、12
添加到df1的索引中。这是真的吗?嗨,是的,两个数据帧中的行是相同的,具有相同的值。对于所有重复索引的地方,只需考虑一个实例;虽然,外部联接或这些联接的并集可以起作用,但是,它不能保持所需结果的顺序。我要找的是要维护的序列,即2之后必须有10021等等;这很有帮助:)我已经设法按升序更改了索引(通过更改中间四个重复行的索引),然后为我当前的项目应用了两个数据帧的并集。