2017-04-14 6 views
2

私のPythonコードが動作しない次の問題があります。理由と解決方法についていくつかの提案を募集しています。私は.any()を使用する場合、それは私だけmodel_lineを割り当てる最後の範囲を提供します、しかしPython:各行の複数の列を検索する複合配列上のvlookup

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

 
cust_id max_nibt nibt_0 nibt_1 nibt_10 line_0 line_1 line_10 
11 200 -5 200 500 100 200 300 
22 300 -10 100 300 100 200 300 
33 400 -20 0 400 100 200 300 
for i in range (0,11): 
    if (df4['nibt_%s' % i] == df4['max_nibt']): 
     df4['model_line'] = df4['line_%s' % i] 

コードは私に次のエラーを与える:ここで

は、例えば、データフレームです=ライン_10。私が .all()を使用すると、答えはすべてのcust_idsで同じになります。思考?前もって感謝します。

答えて

1

あなたはお互いに比較したい要素をパンダがどのように知っているのでしょうか?

私が正しく理解していれば、あなたが行うことができます:

for i in range(0,11): 
    for j,k in df.iterrows(): 
    if k['nibt_%s' % i] == k['max_nibt']: 
     df.iloc[j]['model_line'] = df.iloc[j]['line_%s' % i] 
2

は、行インデックスの条件文のため.locを使用することを検討してください。このforループは、model_line同じ新しい列を上書きすることができるので、また

for i in [0,1,10]: 
    df4.loc[df4['nibt_%s' % i] == df4['max_nibt'], 'model_line'] = df4['line_%s' % i] 

:ようになり、あなたのforループが故に平等とブール結果の任意の数の両方の列(すなわち、パンダシリーズ)のすべての値を比較し、model_lineの接尾語バージョンを追加することを検討:

for i in [0,1,10]: 
    df4.loc[df4['nibt_%s' % i] == df4['max_nibt'], 'model_line_%s' % i] = df4['line_%s' % i] 
+0

に等しいときline_xから値を入力したいです!ありがとう! – Timmy

+0

素晴らしい!喜んで助けてください。私がパンダで始めたとき、このエラーはおそらく私が遭遇した最も一般的なものでした。解決策を確認するために最も役立つ回答を受け入れてください(将来の読者にも役立ちます)。 – Parfait

4

私はあなたが欲しいものを推測する必要がありますが、あなたは明らかに正しくpd.Seriesを使用していない... here FOを見ますより良い説明。

IIUC
あなたはnibt_xこれは完全に働いた​​

# filter to get `nibt` columns and find the first column that equals max 
nibt_maxes = df.filter(regex='nibt_\d+').eq(df.max_nibt, 0).idxmax(1) 

# swap out the string `nibt` with `line` 
lines = nibt_maxes.replace('nibt', 'line', regex=True) 

# use `lookup` and assign values 
df['model'] = df.lookup(lines.index, lines.values) 

    cust_id max_nibt nibt_0 nibt_1 nibt_10 line_0 line_1 line_10 model 
0  11  200  -5  200  500  100  200  300 200 
1  22  300  -10  100  300  100  200  300 300 
2  33  400  -20  0  400  100  200  300 300 
+2

よくできました!ベクトル化されたバージョン。私のパンダのツールキットに 'lookup'を追加しました! – Parfait

+0

ありがとうございます@パルフェット – piRSquared