代码之家  ›  专栏  ›  技术社区  ›  Sociopath

如何合并月份和年份列以获得单个mm-yyyy列?

  •  0
  • Sociopath  · 技术社区  · 6 年前

    Sr.  lwd_month lwd_year
    1     3        2015
    2     6        2018
    3.    9        2017
    4.    NaN      NaN
    5.    5        2015
    

    Sr.  lwd_month   lwd_Year   MonthYear
    1     3          2015    03-2015
    2     6          2018     06-2018
    3.    9          2017     09-2017
    4.    NaN        NaN      NaT
    5.    5          2015     05-2015
    6.    3          NaN      NaT
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    year month 0.18.1+ .

    to_datetime by multiple columns 具有 strftime

    df['MonthYear']=pd.to_datetime(df.assign(day=1)[['year','month','day']]).dt.strftime('%m-%Y')
    print (df)
       Sr.  month    year MonthYear
    0  1.0    3.0  2015.0   03-2015
    1  2.0    6.0  2018.0   06-2018
    2  3.0    9.0  2017.0   09-2017
    3  4.0    NaN     NaN       NaT
    4  5.0    5.0  2015.0   05-2015
    
    print (type(df.loc[0, 'MonthYear']))
    <class 'str'>
    

    to_period

    df['MonthYear'] = pd.to_datetime(df.assign(day=1)[['year','month','day']]).dt.to_period('m')
    print (df)
       Sr.  month    year MonthYear
    0  1.0    3.0  2015.0   2015-03
    1  2.0    6.0  2018.0   2018-06
    2  3.0    9.0  2017.0   2017-09
    3  4.0    NaN     NaN       NaT
    4  5.0    5.0  2015.0   2015-05
    
    print (type(df.loc[0, 'MonthYear']))
    <class 'pandas._libs.tslibs.period.Period'>
    
        2
  •  2
  •   U13-Forward    6 年前

    为什么不这样:

    df['MonthYear'] = pd.to_datetime(df[['Year', 'Month']].assign(Day=1)).dt.strftime('%m-%Y')
    print(df)
    

       Sr.  Month    Year MonthYear
    0  1.0    3.0  2015.0   03-2015
    1  2.0    6.0  2018.0   06-2018
    2  3.0    9.0  2017.0   09-2017
    3  4.0    NaN     NaN       NaT
    4  5.0    5.0  2015.0   05-2015