如何在数据帧中创建具有多个条件的新列,同时能够缩放条件?



我有一个看起来像这样的数据帧:

DF:

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

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

例如:

如果name列等于appledate列等于today列,type列等于a则新列id等于1

如果name列等于banana,并且date列等于today,并且type列等于b则新列id等于2

新的 DF 将如下所示:

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

我希望以后能够根据 df 中的列值添加更多子句,因此寻找一种可扩展的方法。

目前,我可以使用这样的一列和一个条件来执行此操作:

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. 将"date"转换为datetime
  2. 使用np.select构建条件
  3. 分配
  4. 列并删除无效分配

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

最新更新