2017-07-18 6 views
1

にパンダのデータフレーム内の別の列の値を参照することにより、新しい列を追加することができ、私はパンダはどのように私はPythonの

df 
index | ref | 1 | 2 | 3 | 4 | 5 | 
1  | 1 | -3 | -2 | -9 | 0 | -2 | 
2  | 3 | -1 | -2 | -5 | 3 | -5 | 
3  | 5 | -4 | -7 | -4 | 2 | -1 | 
4  | 4 | -2 | -4 | -2 | -1 | -9 | 
5  | 1 | -2 | -3 | -1 | -3 | -3 | 

のデータフレームの下にあると私は、参照することにより、「新しい」の列を作りたいです

df 
index | ref | 1 | 2 | 3 | 4 | 5 | new | 
1  | 1 | -3 | -2 | -9 | 0 | -2 | -3 | 
2  | 3 | -1 | -2 | -5 | 3 | -5 | -5 | 
3  | 5 | -4 | -7 | -4 | 2 | -1 | -1 | 
4  | 4 | -2 | -4 | -2 | -1 | -9 | -1 | 
5  | 1 | -2 | -3 | -1 | -3 | -3 | -2 | 

私は以下のように試みましたが、メモリ不足のために失敗しました。 (コード内に何かがループしています)

df['new'] = df[df['ref']] 

私のアドバイスはありますか?

答えて

0

次の構文を使用できます。ここでのパラメータは、例えば3

df['new'] = df['ref'] * <parameter> 

によって乗算のように表現することがあります。

T['new'] = T['column0'] * 3 
1

DataFrame.lookupが必要ですが、ref列の列と値の必要同じ種類である:

​​
#values are strings 
print (df['ref'].tolist()) 
['1', '3', '5', '4'] 
print (df.columns.tolist()) 
['ref', '1', '2', '3', '4', '5'] 

df['new '] = df.lookup(df.index, df['ref']) 
print (df) 
     ref 1 2 3 4 5 new 
index       
1  1 -3 -2 -9 0 -2 -3 
2  3 -1 -2 -5 3 -5 -5 
3  5 -4 -7 -4 2 -1 -1 
4  4 -2 -4 -2 -1 -9 -1 

EDIT:

列名の値がint型の変換のためにastype追加されているref内の文字列と値がある場合:

print (df['ref'].tolist()) 
[1, 3, 5, 4] 
print (df.columns.tolist()) 
['ref', '1', '2', '3', '4', '5'] 

df['new '] = df.lookup(df.index, df['ref'].astype(str)) 
print (df) 
     ref 1 2 3 4 5 new 
index       
1  1 -3 -2 -9 0 -2 -3 
2  3 -1 -2 -5 3 -5 -5 
3  5 -4 -7 -4 2 -1 -1 
4  4 -2 -4 -2 -1 -9 -1 

EDIT1:

はインデックスまたは列の重複があります値。ユニークインデックスがreset_indexを追加するため

print (df.columns.is_unique) 
True 
print (df.index.is_unique) 
False 

だから、必要があります。

df = df.reset_index(drop=True) 
df['new '] = df.lookup(df.index, df['ref'].astype(str)) 
print (df) 
    ref 1 2 3 4 5 new 
0 1 -3 -2 -9 0 -2 -3 
1 3 -1 -2 -5 3 -5 -5 
2 5 -4 -7 -4 2 -1 -1 
3 4 -2 -4 -2 -1 -9 -1 
4 1 -2 -3 -1 -3 -3 -2 
+0

こんにちは、あなたのアドバイスをありがとう!しかし、私はエラーメッセージを受け取りました pandas.core.indexes.base.InvalidIndexError:再インデックスは、一意に評価されたIndexオブジェクトでのみ有効です。 refカラムでは、同じ値があり、このエラーによって引き起こされたと思います。 – user8159259

+0

どのように動作しますか? – jezrael

+0

データフレームを以前の投稿から変更しました – user8159259

関連する問題