我确信这是一个微不足道的问题,但我似乎无法找到解决方案。我有以下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_b
,df
)。其他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索引不匹配,因此此解决方案对我不起作用。
答案 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_a
和df_b
很困难,因为pandas数据实际上是一个numpy数组,无法调整大小。