我可以使用列名作为条件吗?

2024-04-25 01:04:23 发布

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

我有一个熊猫数据框架,它包含大约100列。 这些列中的大多数都是日期,我希望遍历所有这些

以下是一个例子:

^{tb1}$

如果日期+天数<;=2020-12-20,将此列的值设置为TRUE,如果否,则设置为FALSE。 我唯一不能做的就是在我的条件中将列名作为参数,并对所有这些日期列执行此操作

以下是我的预期输出:

^{tb2}$

也许在一个循环中,但要运行很长时间


Tags: 数据lt框架falsetrue参数条件中将
2条回答

确保将日期列转换为datetime,以使其正常工作

我使用的基本步骤是:

  1. 让pandas识别日期列
  2. 将“日期”列按天数移动
  3. 将移位日期列与列中的日期进行比较
from dateutil.relativedelta import relativedelta

shifted_date = [
    t + relativedelta(days=nb_days) 
      for t, nb_days in zip(df[date], df[nbDays])
]
date_columns = df.select_dtypes(include=[np.datetime64]).columns

for date_column in date_columns:
    date_to_check = pd.to_datetime(date_column)
    
    df[date_column] = np.where(
         shifted_date <= date_to_check, True, False
    )

不要害怕在这里使用for循环,因为艰巨的工作是在np.where函数中矢量化的

因为列的顺序是固定的,所以可以将日期存储在列表或序列中,然后使用它生成值,如

dates = df.columns[2:]
# be sure to convert them to some formats other than str
df.iloc[:,2:] = df.iloc[:,2:].apply(lambda x:dates<=x.data+x.nbDays)

相关问题 更多 >