2017-05-21 9 views
1

私はPythonで作業しており、パンダのデータフレームに大きなデータセットを持っています。私はこのデータの一部を取り出し、それを別のデータフレームに入れました。そこでは、新しい列を作成してデータを取り込みました。ここでは、この新しい列を元のデータフレームに戻して、既存の列の1つを上書きしますが、編集したセクションのみにします。あるデータフレームから別のデータフレームへのデータの挿入Index

これが最も効果的な方法を教えてください。唯一の一意の識別子は、自動的に生成されるインデックスです。 2番目のデータフレームは大きなインデックスと同じインデックス値を保持しているので、まっすぐ進むはずですが、どうすればよいかわかりません a)自動的に作成されたインデックスを参照してください b)これらのインデックスを使用して、別のデータフレーム

ので、それは(私はこれが構文のマッシュアップで実現ちょうど良く、私がやろうとしていますかを説明しようとしている!)このようなものでなければなりません:

where df1.ROW.INDEX == df2.ROW.INDEX insert into 
df1['col_name'].value from df2.['col_name'].value 

すべてのヘルプは非常だろう感謝。

UPDATE: 私は今、ほとんど機能し、このコードを持っている:

index_values = edited_df.index.values 
for i in index_values: 
    main_df.iloc[i]['pop'] = 
    edited_df.iloc[i]['new_col'] 

私は警告、エラーを取得し、main_dfが変更されていません。メインのデータフレームを更新するのではなく、各繰り返しでコピーを作成しているようです。

更新日:固定 私は最終的に、同様の問題を抱えている人のために以下の解決策を見つけ出しました。

index_values = edited_df.index.values 
for i in index_values: 
    main_df.iloc[i, main_df.columns.get_loc('pop')] = 
    edited_df.iloc[i]['new_col'] 

答えて

1

を、データフレームに渡されたインプレイスアップデートに使用することを検討してください。列名が両方のデータセットと一致していることを確認してください。

main_df.update(edited_df, join='left', overwrite=True) 
1

解決策を見つけたことを感謝します。しかし、必要がないときにforループを使用しています。私はあなたのループを改善することから始めます。次に、私はバックアップします@ Partfaitのupdateアイディア

locは、インデックスとカラムの値で参照するために使用します。あなたはインデックス値が連続した整数であるという偶然に頼っています。

index_values = edited_df.index.values 
for i in index_values: 
    main_df.loc[i, 'pop'] = edited_df.loc[i, 'new_col'] 

しかし、locは、インデクサーのような配列を取ることができますし、あなただけのスカラーインデクサーを使用しています。それはあなたがat

index_values = edited_df.index.values 
for i in index_values: 
    main_df.at[i, 'pop'] = edited_df.at[i, 'new_col'] 

を使用して方がいいでしょうかあなたが言ったことset_value

index_values = edited_df.index.values 
for i in index_values: 
    main_df.set_value(i, 'pop', edited_df.get_value(i, 'new_col')) 

すべてでさらに速く行くことができることを意味し、ここであなたが行くloc 1で使用できる方法である

main_df.loc[:, 'pop'] = edited_df['new_col'] 

または@パートファットが示唆するように

main_df.update(edited_df['new_col'].rename('pop')) 
関連する問題