Python:在给定的索引值处将DataFrame插入到更大的DataFrame中

时间:2016-09-11 04:49:11

标签: python pandas dictionary dataframe insert

我确信这是一个微不足道的问题,但我似乎无法找到解决方案。我有以下DataFrame:

>>> df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                    'B': [1, 2, 3, 4, 5],
                    'C': [1, 2, 3, 4, 5]})
>>> df
   A  B  C
0  1  1  1
1  2  2  2
2  3  3  3
3  4  4  4
4  5  5  5

我还有一些我希望插入主DataFrame(df_a)的其他DataFrame(df_bdf)。其他DataFrames保存到字典中,其中key是我希望在之后插入其他DataFrames的行的索引。

df_a = pd.DataFrame({'A': ['X', 'Y'],
                    'B': ['X', 'Y'],
                    'C': ['X', 'Y']})

df_b = pd.DataFrame({'A': ['X', 'Y'],
                    'B': ['X', 'Y'],
                    'C': ['X', 'Y']})

idx_dict = {}
idx_dict[1] = df_a
idx_dict[3] = df_b 

最终结果将类似于:

>>> result
   A  B  C
0  1  1  1
1  2  2  2
0  X  X  X
1  Y  Y  Y
2  3  3  3
3  4  4  4
0  X  X  X
1  Y  Y  Y
4  5  5  5

我已经阅读了python concatenate文档,但似乎无法找到如何指定我希望插入DataFrame的特定位置。找到了类似的问题here,但由于我的DataFrame索引不匹配,因此此解决方案对我不起作用。

1 个答案:

答案 0 :(得分:3)

至少你想要的是通过切片和连接来实现:

from collections import OrderedDict
idx_dict = OrderedDict(sorted(idx_dict.items()))
dfs = []
start_idx = 0
for idx in idx_dict:
    dfs.append(df.iloc[start_idx:idx + 1])
    dfs.append(idx_dict[idx])
    start_idx = idx + 1
dfs.append(df.iloc[start_idx:])
result = pd.concat(dfs)

我认为“插入”df_adf_b很困难,因为pandas数据实际上是一个numpy数组,无法调整大小。