替换pandas数据帧中的特定值范围

时间:2017-09-12 05:20:18

标签: python pandas dataframe

我有大量的数据集,并且有大量的值超过平均值。 例如,

<travelerGroup>
    <traveler>
        <elementNumber>1</elementNumber>
        <travelerTypeCode>ADT</travelerTypeCode>
        <travelerDetails>
            <firstName>Adult One</firstName>
            <surname>Surname</surname>
        </travelerDetails>
        <infant>
            <firstName>Infant One</firstName>
            <surname>Surname</surname>
            <dateOfBirth>2016-01-06</dateOfBirth>
        </infant>
    </traveler>
    <traveler>
        <elementNumber>2</elementNumber>
        <travelerTypeCode>ADT</travelerTypeCode>
        <travelerDetails>
            <firstName>Adult Two</firstName>
            <surname>Surname</surname>
        </travelerDetails>
        <infant>
            <firstName>Infant Two</firstName>
            <surname>Surname</surname>
            <dateOfBirth>2017-01-06</dateOfBirth>
        </infant>
    </traveler>
    <traveler>
        <elementNumber>5</elementNumber>
        <travelerTypeCode>ADT</travelerTypeCode>
        <travelerDetails>
            <firstName>Adult Three</firstName>
            <surname>Surname</surname>
        </travelerDetails>
    </traveler>
    <traveler>
        <elementNumber>6</elementNumber>
        <travelerTypeCode>CHD</travelerTypeCode>
        <travelerDetails>
            <firstName>Child One</firstName>
            <surname>Surname</surname>
            <dateOfBirth>2013-01-06</dateOfBirth>
        </travelerDetails>
    </traveler>
</travelerGroup>

我希望将 A B 1 'H' 10 2 'E' 10000 3 'L' 12 4 'L' 8 5 'O' 11 单元格设置为0,我尝试了这个,

B2

但是没有运气。 如何使我的数据框架像这样,

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

谢谢!

2 个答案:

答案 0 :(得分:5)

你真的很接近 - 而不是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 :(得分:3)

另一种选择:

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