代码之家  ›  专栏  ›  技术社区  ›  RustyShackleford

如何在dataframe中创建条件大于的新列,同时能够缩放条件?

  •  0
  • RustyShackleford  · 技术社区  · 7 年前

    我有一个如下所示的数据框:

    数据框:

    name      date                         type
    apple     2018-01-01 00:00:00           a 
    banana    2018-08-18 00:00:00           b
    

    如何根据其他列的多个条件创建具有特定值的新列?

    例如:

    name 列等于 apple date 列等于 today type 列等于 a 然后新建列 id 等于 1 .

    如果 名称 banana ,和 日期 今天 ,和 类型 列等于 b 身份证件 等于 2

    新的df将如下所示:

    name      date                         type       id
    banana    2018-08-18 00:00:00           b          2
    

    我希望能够添加更多的基于列值的子句,这些列值稍后在df中,因此寻找一种可伸缩的方法。

    目前,我可以使用一个类似so的列和一个条件来完成此操作:

    df.loc[df['name'].str.contains("Apple"),'id'] = 1
    

    提前谢谢你。

    编辑:

    new_df=df[((df['name'].str.contains('apple'))&(df['type'].str.contains('a'))&((df['date']=today))]

    1 回复  |  直到 7 年前
        1
  •  3
  •   cs95 abhishek58g    7 年前
    1. 将“日期”转换为 datetime
    2. 使用 np.select
    3. 分配列并删除无效的分配

    df['date'] = pd.to_datetime(df['date'], errors='coerce')
    
    today = pd.to_datetime('today')
    ids = np.select( 
        [
            df.name.eq('apple') & df.date.eq(today) & df['type'].eq('a'),
            df.name.eq('banana') & df.date.eq(today) & df['type'].eq('b')
        ],
        [1, 2],
        default=np.nan
    )
    

    df = df.assign(ids=ids).dropna(subset=['ids'])
    df
         name       date type  ids
    1  banana 2018-08-18    b  2.0