2017-01-06 6 views
1

['key'、 'col1'、 'col2'、 'col3']のようなdatasfram(df)のpanadasを持っていて、そのインデックスが 'pandas series'(sr)データフレームの「キー」と同じです。私は同じ列をcol4という新しい列のデータフレームに追加したいと思います。私は次のコードを持っています:PandasシリーズをDataFramに列として追加する

for index, row in segmention.iterrows():  
    df[df['key']==row['key']]['col4']=sr.loc[row['key']] 

コードが非常に遅いです。私はそれを行うより効率的で良い方法があるはずだと思います。助けてくれますか?

+0

IIUCその後、 'DF [「COL4」] =のDFを動作させるためにあなたのシリーズに名前があることを確認する必要があり[「キー」]。マップ(SR)'それはのために有用であろう – EdChum

+1

を動作するはずですあなたはあいまいさを避けるために代表的な例と望ましい出力を投稿します – EdChum

答えて

0

述べEdChumとして使用map

df['col4'] = df['key'].map(sr) 
print (df) 
    col1 col2 col3 key col4 
0  4  7  1 A  2 
1  5  8  3 B  4 
2  6  9  5 C  1 

それともset_indexに割り当てる:

:いけない key使用による Seriesalignデータを( 4,1,2対違い 2,1,4を参照)が必要な場合

df = df.set_index('key') 
df['col4'] = sr 
print (df) 
    col1 col2 col3 col4 
key       
A  4  7  1  2 
B  5  8  3  4 
C  6  9  5  1 

df['col4'] = sr.values 
print (df) 
    col1 col2 col3 key col4 
0  4  7  1 A  4 
1  5  8  3 B  1 
2  6  9  5 C  2 

サンプル:

df = pd.DataFrame({'key':[1,2,3], 
        'col1':[4,5,6], 
        'col2':[7,8,9], 
        'col3':[1,3,5]}, index=list('ABC')) 

print (df) 
    col1 col2 col3 key 
A  4  7  1 1 
B  5  8  3 2 
C  6  9  5 3 

sr = pd.Series([4,1,2], index=list('BCA')) 
print (sr) 
B 4 
C 1 
A 2 
dtype: int64 

df['col4'] = df['key'].map(sr) 
print (df) 
    col1 col2 col3 key col4 
0  4  7  1 A  2 
1  5  8  3 B  4 
2  6  9  5 C  1 

df = df.set_index('key') 
df['col4'] = sr 
print (df) 
    col1 col2 col3 col4 
key       
A  4  7  1  2 
B  5  8  3  4 
C  6  9  5  1 
+0

私は、OPが 'key 'に基づいて' map'や 'merge'のように新しい列' col4 'を追加したいと思います – EdChum

0

あなたは簡単に行うことができます。

df['col4'] = sr 

誤解しないでください。

0

これは実際にjoinの場合に適しています。左側のデータフレームは、右側のデータフレーム/シリーズのインデックスと列を揃えます。あなたはそれが

sr.name = 'some name' 
df.join(sr, on='key') 
関連する問題