2016-09-11 9 views
1

私はこれが簡単な質問だと確信していますが、私は解決策を見つけることができません。私は、次のデータフレームを持っている:Python:指定されたインデックス値で大きな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 

私も、私は主データフレーム(df)に挿入したいいくつかの追加のデータフレーム(df_adf_b)を持っています。追加のDataFramesは辞書に保存され、キーは後で追加の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 

最終結果はこのようになり:私はpythonのconcatenateドキュメントを読んできましたが、私はデータフレームを挿入したい特定の場所を指定する方法を見つけるように見えることはできません

>>> 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 

を。同様の質問hereが見つかりましたが、私のDataFrameのインデックスが一致しないため、このソリューションは私にとってはうまくいきません。

答えて

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) 

私はパンダのデータが実際にリサイズすることができませんnumpyの配列であるためdf_adf_bを「挿入する」ことは難しいと思います。

+0

ありがとうございます。私はこれを行う機能はないが、それは素晴らしい解決策であることに驚いている。乾杯。 –

関連する問題