【问题标题】:Matching data from a list with data into a column in python将列表中的数据与数据匹配到python中的列中
【发布时间】:2017-08-25 09:56:59
【问题描述】:

我有一个名为 data 的大数据框,它有几列,特别是一列“日期”。

我想创建一个新列“days_BH”,它告诉我日期是否是银行假日(=1 表示是,=0 表示否)。

所以首先我创建一个包含法国银行假期的列表:

bank_holidays= ["01-01","05-01","05-08","07-14","11-01","11-11","12-25","08-15"]

我想将它与类型为:pandas.core.series.Series 的“数据”列中的日期匹配(我不太了解那种类型)。

列数据,格式为:%m-%d,如下所示(前 3 行):

data
07-05
07-06
07-07

提前致谢,

【问题讨论】:

    标签: python list loops match


    【解决方案1】:

    假设你有这个数据框:

    data = pd.DataFrame()
    data["data"] = ["01-01", "05-01", "05-08", "07-14", "11-01", "11-11", "11-12", "11-13"]
    bank_holidays = ["01-01", "05-01", "05-08", "07-14", "11-01", "11-11", "12-25", "08-15"]
    

    那么你可以使用.isin():

    data["days_BH"] = data["data"].isin(bank_holidays).astype(int)
    

    打印的新数据框如下所示:

        data  days_BH
    0  01-01        1
    1  05-01        1
    2  05-08        1
    3  07-14        1
    4  11-01        1
    5  11-11        1
    6  11-12        0
    7  11-13        0
    

    【讨论】:

      【解决方案2】:

      如果bank_holidays 列表和数据帧df['data'] 中的数据字段属于同一类型,那么应该这样做:

       bank_holidays= ["01-01","05-01","05-08","07-14","11-01","11-11","12-25","08-15"]
       df['days_BH'] = df['data'].apply(lambda x: x == bank_holidays).map({True: 1, False: 0})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-03
        • 2012-04-11
        • 1970-01-01
        • 2023-01-23
        • 2020-10-18
        • 2016-08-26
        • 2021-10-28
        • 1970-01-01
        相关资源
        最近更新 更多