2015-05-14 69 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