2017-04-26 54 views
2

您好,我有以下的数据帧(DF):大熊猫筛选和应用

Group Value 
    A  1 
    A  2 
    A  3 
    B -1 
    B  2 
    B  3 

我想(-1即乘)所有B组转换为负值,如果他们arent了。

df[df['group'] == 'B', 'value'].apply(... if value less than 0 then -1*value) 

请让我知道正确的方式去在熊猫框架这一点。谢谢

回答

4
In [85]: df.loc[df.Group.eq('B') & df.Value.gt(0), 'Value'] *= -1 

In [86]: df 
Out[86]: 
    Group Value 
0  A  1 
1  A  2 
2  A  3 
3  B  -1 
4  B  -2 
5  B  -3 
+1

不错的回答不同的方式!你可以告诉我为什么不df.loc [(df.Group =='B'&df.Value> 0),'Value'] * = -1是否工作?我得到一个错误,TypeError:无法比较dtyped [int64]数组和标量类型[bool] – Vaishali

+1

@ A-Za-z,谢谢!这是[熊猫与Python优先问题](http://stackoverflow.com/a/40578010/5741205)。试试这个:'df.loc [(df.Group =='B')&(df.Value> 0),'Value']' – MaxU

+0

啊!我觉得很愚蠢:) – Vaishali

2

使用masknp.sign

df.assign(Value=df.Value.mask(df.Group == 'B', -np.sign(df.Value) * df.Value)) 

    Group Value 
0  A  1 
1  A  2 
2  A  3 
3  B  -1 
4  B  -2 
5  B  -3