pandas dataframe列中值的条件替换

2024-04-19 07:36:12 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个pandas数据框,列值为age,如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 但似乎没用。


Tags: 数据ltgtpandasdfage列值
2条回答

可以根据条件将序列与值(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

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

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)

相关问题 更多 >