2016-12-21 17 views
1

注:この質問は元々精度が足りなかったため編集および拡張されました。 最初の例では、質問を紹介し、だけのように見える導入2つのデータセットを持つpython pandasインデックス列に関する列の値をコピーする方法

として考慮されるべきである。

idx value other_columns 
1 7 
2 6 
3 5 

idx value ...other_columns 
1 0 
2 0 
4 0 
私はインデックス列に関する拳データセットの値をコピーしたい

(と非マッチングカラム上セットのNaN)、これを入手

idx value ...other_columns 
1 7 
2 6 
4 NaN 

よろしく

編集:

私の最初のポストについては、EdChumの答えは正解でしたが、私の質問は精度を欠いていました。

other_columnsは他の列を変更しないでください。私の目標はdataset2のdataset1の値を挿入することです。 より正確な例:

df1= pd.DataFrame({'idx':[1,2,3], 'val':[7,6,5], 'other':[1,1,1]}) 
df2= pd.DataFrame({'idx':[1,2,4], 'val':[0,0,0], 'other':[1,1,1]}) 

df1 
    idx other val 
0 1  1 7 
1 2  1 6 
2 3  1 5 

df2 
    idx other val 
0 1  7 0 
1 2  7 0 
2 4  7 0 

私は「フエゴのマージベースのanwserからサブフレームであるが、私は唯一の[を維持する方法をまだ見ていない

idx other val 
0 1  7 7 
1 2  7 6 
2 4  7 NaN 

を取得したいのですがidx '、' val_x '、' other_y '] cols。

+0

インデックスの列を言うとき、それは実際にはインデックスですか? – EdChum

+0

これは索引ではなく、値が異なる属性列です。 – spacm

+0

私の答えの最後の部分を参照 – EdChum

答えて

0

は、私はあなたがパンダmerge機能を使うべきだと思います。

howパラメータ(NaNを設定するか、または左、右、または両方のみを取る...)の場合は、docを参照してください。

ya!

EDIT:

私はあなたの編集を見て、あなたがしたい列のみを抽出する方法を疑問に思う、あなただけのマージにしたい列を渡すことがあります。

data = panda.merge(df1[['idx', 'val']], df2.drop('val', axis=1), on="idx", how="right") 

( df2の列を削除しないことを心配しないで、列なしでDataFrameを返します)

+0

これは、OPの希望の出力のように3行ではない4行になります – EdChum

+0

それはhowパラメータに依存します。私はそれが3行しか要求していなかったので、 "right"を置くように編集しました。しかし、私は彼がドキュメンテーションでこれを理解できると思います。 –

+0

列の値に不一致があり、column_x列とcolumn_y列が追加されるため、まだ不完全な答えが残っていますが、私はdownvoteしませんでしたが、まだ回答が不完全ですので、まだ不完全です – EdChum

2

使用reindex

In [142]: 
df1.reindex(df2.index) 

Out[142]: 
    value other_columns 
idx      
1  7.0   NaN 
2  6.0   NaN 
4  NaN   NaN 

reindex_likeも動作します:

In [143]: 
df1.reindex_like(df2) 

Out[143]: 
    value ...other_columns 
idx       
1  7.0    NaN 
2  6.0    NaN 
4  NaN    NaN 

またはlocを使用してラベルベースのインデックス:

In [144]: 
df1.loc[df2.index] 

Out[144]: 
    value other_columns 
idx      
1  7.0   NaN 
2  6.0   NaN 
4  NaN   NaN 

idxが本当に列である場合には、必要に最初に​​に電話してくださいその後、DOC上記のいずれか:あなたが望む結果は最初の列になります

data = panda.merge(dataframe1, dataframe2, on="idx", how="right") 

In [148]: 
df1.set_index('idx').reindex(df2.set_index('idx').index).reset_index() 

Out[148]: 
    idx value other_columns 
0 1 7.0   NaN 
1 2 6.0   NaN 
2 4 NaN   NaN 
+0

@MohammadYusufGhazi再索引付けの質問であることを私に見せてください。 – EdChum

+0

彼の結果のデータフレームは、マージしたい場合のように見えます。たぶん私は間違っていたでしょう。あるいは、彼は彼の質問を正しくしなかったかもしれない。 – MYGz

+0

はい、私は十分に質問を詳述しなかったと思います、私はそれを編集します。この素早く興味深い答えのためのThanx。 – spacm

関連する問題