2017-04-05 6 views
0

私は2つのパンダのデータフレームを持っています。一つは実際のデータを含み、二番目の行インデックスはある値で置き換える必要があります。ルックアップに基づいてパンダの行の値を変更します

DF1:入力レコード

A   B  record_id record_type 
0 12342345 10   011   H 
1 65767454 20   012   I 
2 78545343 30   013   I 
3 43455467 40   014   I 

DF2:

Column1 Column2 Column3 record_id 
0  1  2  4  011 
1  1  2  None 012 
2  1  2  4  013 
3  1  2  None 014 

出力結果:

A   B   record_id record_type 
0 #   #   011   # 
1 #   #   012   I 
2 #   #   013   # 
3 #   #   014   I 

:情報を変更するには、行のインデックスが必要(ここでは#など)が含まれていしたがって、record_id検索に基づいて、対応する行インデックス値を変更する必要があります。

ここでは、Df2に存在する(1 2 4 011)には、Df1からのidが011である特定のレコードに対して、行インデックスを最初から2番目に変更したいという情報が含まれています。

出力結果では、行インデックス1,2,4のレコードID011の行の値を#に置き換え、値を#として置き換えます。

パンダで同じことを行う他の方法をお勧めします。

答えて

1

まず、いくつかの前処理を行うことで、より使いやすくすることができます。インデックスをrecord_idに設定し、column3をdf2からrecord_typeに変更します。現在、データフレームは同一のインデックスとカラム名を持ち、自動アライメントを容易にします。

df1 = df1.set_index('record_id') 
df2 = df2.set_index('record_id') 
df2 = df2.rename(columns={'Column3':'record_type'}) 
df2 = df2.replace('None', np.nan) 

その後、我々は、D2とDF2の欠損値を記入して、すべての元の非欠損値「#」にすることができます。

df2.fillna(df1).where(df2.isnull()).fillna('#') 

      Column1 Column2 record_type 
record_id        
11    #  #   # 
12    #  #   I 
13    #  #   # 
14    #  #   I 
+0

iはDf2.Df2のCOLUMN1、COLUMN2にRECORD_ID存在に基づいて検索を行いたい、COLUMN3 iはDF1に#の値を移入する対象のインデックス番号を含み(例:[1 2 4 011]行Iを表しますDf1の行ID011に対して行インデックスを最初から2番目に変更したい)。あなたが提供する入力は、私が望まない#値を直接置き換えます。 – mandar

関連する問題