【问题标题】:pandas conditional str concat with a Datetime column带有 Datetime 列的 pandas 条件 str concat
【发布时间】:2019-10-02 20:41:04
【问题描述】:

我只想将前一天与我的日期列的年份加入,使其看起来像 day-ahead_2019 或 day-ahead_2018,具体取决于日期列中的年份

我有两列:

DELIVERY_PERIOD   
day-ahead
day-ahead
day-ahead
day-ahead
week1_2019
week2_2018

和,

Date
13/05/2019
14/05/2019
11/05/2019
10/05/2019

我尝试使用 str.cat,但它不适用于我的 Date 列的 datetime64

       df.DELIVERY_PERIOD == 'day-ahead' = df.str.cat(df.Date.dt.year)

出现错误,因为它不是 str 类型的数据 我想到了相反的方式 这是创建新列以从 Date.dt.year 中获取年份,将其转换为 str 并仅加入 day-ahead 但我认为这将是一个很长的路要走 我欢迎任何建议

【问题讨论】:

    标签: python string pandas concatenation string-concatenation


    【解决方案1】:

    我会这样做,

    假设您的数据框名为 df

    您可以传递astype 函数将您的系列转换为字符串并将其传递回您的新系列或现有系列。

    df['DELIVERY_PERIOD'] = df.loc[df['DELIVERY_PERIOD'] == 'day-ahead', 'DELIVERY_PERIOD'] = df['DELIVERY_PERIOD'] + '_' + df['Date'].dt.year.astype(str)
    print(df)
    
    
     DELIVERY_PERIOD    Date
    0   day-ahead_2019  2019-05-13
    1   day-ahead_2019  2019-05-14
    2   day-ahead_2019  2019-11-05
    3   day-ahead_2019  2019-11-05
    

    【讨论】:

    • 关于这个的另一个问题,说如果我想加入这一年的不仅仅是前一天,我试图制作一个包含前一天和前一周的过滤器列表。即 filterlist = filterlist = gas[gas['Period'].isin(['day-ahead',' ''week-ahead])] 并遵循:gas.loc[gas['Period'] == filterlist, 'Period'] = gas['Period'] + '_' + gas['Date'].dt.year.astype(str) 我最终得到了这个错误:'int' object is not iterable
    • 谢谢,如果这是你应该打绿勾的答案 :) 很难说,你能用输入和输出样本创建一个新问题吗?我们可以提供帮助
    • 没问题,很快就会提出一个新问题。谢谢你
    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 2016-07-02
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2021-04-30
    • 1970-01-01
    相关资源
    最近更新 更多