【问题标题】:Creating a function in python to Execute it on Entire Dataframe在 python 中创建一个函数以在整个数据帧上执行它
【发布时间】:2023-01-12 16:53:09
【问题描述】:

我有一个数据,其中包含带有日期的列:

col_1                     col_2               
'may 2021 - 2023'    'nov 2020 - feb 2021'
'jan 2022 - 2023'    'sep 2021- 2023'

使用下面的代码我可以创建所需的输出,但我希望创建一个可以将数据帧作为输入的函数来产生预期的输出:

s = df['col_1'].str.split(r'\s*-\s*')
df['year_1'] = (pd
   .to_datetime(s.str[1])
   .sub(pd.to_datetime(s.str[0])))


t = df['col_2'].str.split(r'\s*-\s*')
df['year_2'] = (pd
   .to_datetime(t.str[1])
   .sub(pd.to_datetime(t.str[0])))

要准备以下输出,我需要重新运行代码并更改变量。正如所解释的我需要做一个功能.请注意,列数可以更多,因此代码应该可以正常工作

预期产出

      col_1           Year_1                     col_2            Year_2       
'may 2021 - 2023'    610 days            'sep 2017-dec 2017'     91 days
'jan 2022 - 2023'    365 days             'sep 2021- 2023'       487 days

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用:

    def compute_days(sr):
        start, end = sr.str.strip("'").str.split('-')
        return pd.to_datetime(end) - pd.to_datetime(start)
    
    days = df.apply(compute_days).rename(columns=lambda x: f"Year_{x.split('_')[1]}")
    out = pd.concat([df, days], axis=1)
    

    输出:

                   col_1                  col_2   Year_1   Year_2
    0  'may 2021 - 2023'  'nov 2020 - feb 2021' 245 days 304 days
    1  'jan 2022 - 2023'       'sep 2021- 2023'   0 days 699 days
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      相关资源
      最近更新 更多