2017-09-12 61 views
1

我有大数据集,并且有大量数值超过平均值。 例如,取代数据帧中特定值的范围大熊猫

A   B 
1 'H'  10 
2 'E' 10000 
3 'L'  12 
4 'L'  8 
5 'O'  11 

,我想设置B2细胞为0,我想这一点,

df['B'] = df['B'].replace([df['B'] > 15], 0) 

,但没有得到任何运气。 怎样才能让我的数据框这样,

A   B 
1 'H'  10 
2 'E'  0 
3 'L'  12 
4 'L'  8 
5 'O'  11 

谢谢!

回答

1

您是非常接近 - 而不是replace使用mask

df['B'] = df['B'].mask(df['B'] > 15, 0) 
print (df) 
    A B 
1 'H' 10 
2 'E' 0 
3 'L' 12 
4 'L' 8 
5 'O' 11 

备选:

df['B'] = np.where(df['B'] > 15, 0, df['B']) 
print (df) 
    A B 
1 'H' 10 
2 'E' 0 
3 'L' 12 
4 'L' 8 
5 'O' 11 

如果你想更换一些范围:

df['B'] = np.where(df['B'].between(8,11), 0, df['B']) 
print (df) 
    A  B 
1 'H'  0 
2 'E' 10000 
3 'L'  12 
4 'L'  0 
5 'O'  0 
1

另一种选择:

df.loc[df['B'] > 15, 'B'] = 0 
# df 
# B 
#0 10 
#1 0 
#2 12 
#3 8 
#4 11