【问题标题】:Conditional Substitution of values in pandas dataframe columns熊猫数据框列中值的条件替换
【发布时间】:2015-10-23 01:01:32
【问题描述】:

假设我有一个 pandas 数据框,其列值为 age 这样的 df.age = {25, 35, 76, 21, 23, 30}

我想像这样进行就地替换:

如果 df.age >=25 且 df.age

我试过这个 df[df.age >= 7.35 和 df.age

【问题讨论】:

  • 根据刚刚删除的答案,请记住,您要查找的条件的正确语法是 (df.age >= 25) & (df.age <= 35)

标签: python pandas


【解决方案1】:

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

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)

【讨论】:

  • 我真的很喜欢 lambda 部分,如果需要,它给了我很大的灵活性来扩展条件。谢谢!
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-11
    • 2022-06-24
    • 2019-07-31
    • 2018-02-11
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多