pandas数据帧列中的值的有条件替换

时间:2015-10-22 14:32:18

标签: python pandas

假设我有一个prandas数据框,其列值为年龄,如df.age = {25,35,76,21,23,30}

我想做一个像这样的地方替换:

如果df.age> = 25且df.age< = 35:    用1替换该值 其他:    用0

替换该值

我试过这个df [df.age> = 7.35而且df.age< = 7.45,' age'] = 0 但似乎没有用。

2 个答案:

答案 0 :(得分:4)

您还可以创建一个功能来检查您的条件,并应用于数据框:

def condition(value):
    if 25 <= value <= 35:
        return 1
    return 0

# stealing sample from @AnandSKumar because I'm lazy
In [32]: df
Out[32]: 
   age
0   25
1   35
2   76
3   21
4   23
5   30

In [33]: df['age'] = df['age'].apply(condition)

In [34]: df
Out[34]: 
   age
0    1
1    1
2    0
3    0
4    0
5    1

或者使用一个带有lambda的衬垫:

df['age'] = df['age'].apply(lambda x: 1 if 25 <=  x <= 35 else 0)

答案 1 :(得分:3)

您可以根据条件将系列与值(25/35)进行比较,然后使用astype(int)True/False值转换为1/0。示例 -

df['age'] = ((25 <= df['age']) & (df['age'] <= 35)).astype(int)

演示 -

In [2]: df = pd.DataFrame([[25], [35], [76], [21], [23], [30]],columns=['age'])

In [3]: df
Out[3]:
   age
0   25
1   35
2   76
3   21
4   23
5   30

In [6]: ((25 <= df['age']) & (df['age'] <= 35)).astype(int)
Out[6]:
0    1
1    1
2    0
3    0
4    0
5    1
Name: age, dtype: int32