2015-05-14 68 views
1

我想根據現有的變量值爲變量賦值。 我會給你一個簡要的數據解釋。如何根據python中的現有變量爲變量賦值?

mydata 

     category original_wt predicted_wt categorized 
    1 xxxxx  2.5   3.0   original 
    2 yyyyy  3.5   4.0   predicted 
    3 zzzzz  3.0   5.0   predicted 
    4 aaaaa  4.0   2.5   original 
    5 bbbbb  3.2   5.5   original 
    6 ccccc  4.6   3.5   predicted 

從上面的數據我想分配一個基於分類類型的值。
如果是原始分類值應該是同一行的original_wt。
如果預測分類值應該是同一行的predict_wt。

預期輸出:

mydata 

    category original_wt predicted_wt categorized categorized_value 
1 xxxxx  2.5   3.0   original  2.5 
2 yyyyy  3.5   4.0   predicted  4.0 
3 zzzzz  3.0   5.0   predicted  5.0 
4 aaaaa  4.0   2.5   original  4.0 
5 bbbbb  3.2   5.5   original  3.2 
6 ccccc  4.6   3.5   predicted  3.5 

嘗試:

mydata['categorized_value'] = 
    if mydata['categorized'] == 'original': 
     mydata['categorized_value'] = mydata['original_wt'] 
    else: 
    mydata['categorized_value'] = mydata['predicted_wt'] 

我要如何在python我預期的輸出?

+1

代碼是否正確地縮進? else:分支現在沒有縮進,並且將始終運行,所以始終預測值。 –

+0

您獲得了什麼輸出* do *? – 2015-05-14 09:21:28

+0

@Tichodroma無效語法!感謝您的關注。 – ashok

回答

2

使用loc和一個布爾掩碼設置你想要的值:

In [221]: 

df.loc[df['categorized'] == 'original', 'categorized_value'] = df['original_wt'] 
df.loc[df['categorized'] == 'predicted', 'categorized_value'] = df['predicted_wt'] 
df 
Out[221]: 
    category original_wt predicted_wt categorized categorized_value 
1 xxxxx   2.5   3.0 original    2.5 
2 yyyyy   3.5   4.0 predicted    4.0 
3 zzzzz   3.0   5.0 predicted    5.0 
4 aaaaa   4.0   2.5 original    4.0 
5 bbbbb   3.2   5.5 original    3.2 
6 ccccc   4.6   3.5 predicted    3.5 
+0

非常感謝@EdChum – ashok

1

您可以使用apply

mydata['categorized_value'] = mydata.apply(lambda x: x['original_wt'] if x['categorized'] == 'original' else x['predicted_wt'], axis=1) 
+0

非常感謝 – ashok