将月份名称和年份组合在一列中 pandas python

Combine month name and year in a column pandas python

df

Year   Month Name    Avg
2015    Jan           12
2015    Feb           13.4
2015    Mar           10     
...................
2019   Jan           11
2019   Feb           11

代码

df['Month Name-Year']= pd.to_datetime(df['Month Name'].astype(str)+df['Year'].astype(str),format='%b%Y')

在数据框 df 中,groupby 输出平均值在关键字月份名称和年份上。所以月份名称和年份实际上是多级索引。我想创建第三列 Month Name Year 以便我可以使用数据进行一些操作(创建绘图等)。

我使用代码得到的输出如下:

   Year   Month Name    Avg        Month Name-Year
   2015    Jan           12       2015-01-01
   2015    Feb           13.4     2015-02-01
   2015    Mar           10       2015-03-01
    ...................
    2019   Nov           11       2019-11-01
    2019   Dec           11       2019-12-01

等等。

我想要的输出是 Month Name-Year 列中的 2015-Jan、2015-Feb 等...或者我想要 2015-01、2015-02...2019-11、2019-12 等(仅年和月,没有天)。

请帮忙

一种解决方案是转换为日期时间,然后按 Series.dt.to_period or Series.dt.strftime:

更改格式
df['Month Name-Year']=pd.to_datetime(df['Month Name']+df['Year'].astype(str),format='%b%Y')

#for months periods
df['Month Name-Year1'] = df['Month Name-Year'].dt.to_period('m')
#for 2010-02 format
df['Month Name-Year2'] = df['Month Name-Year'].dt.strftime('%Y-%m')

最简单的解决方案是不转换为日期时间,只加入 - 并将年份转换为字符串:

#format 2010-Feb
df['Month Name-Year3'] = df['Year'].astype(str) + '-' + df['Month Name']

...转换为日期时间然后再转换为自定义字符串有什么相同之处:

#format 2010-Feb
df['Month Name-Year31'] = df['Month Name-Year'].dt.strftime('%Y-%b')