noo*_*oob 3 python calendar pandas
df
Year Month Name Avg
2015 Jan 12
2015 Feb 13.4
2015 Mar 10
...................
2019 Jan 11
2019 Feb 11
Run Code Online (Sandbox Code Playgroud)
代码
df['Month Name-Year']= pd.to_datetime(df['Month Name'].astype(str)+df['Year'].astype(str),format='%b%Y')
Run Code Online (Sandbox Code Playgroud)
在数据帧 df 中,groupby 输出 avg 位于键月份名称和年份上。所以月份名称和年份实际上是多级索引。我想创建第三列“月份名称年份”,以便我可以使用数据进行一些操作(创建绘图等)。
我使用代码得到的输出如下:
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
Run Code Online (Sandbox Code Playgroud)
等等。
我想要的输出是“月份名称-年份”列中的 2015-Jan、2015-Feb 等...或者我想要 2015-01、2015-02...2019-11、2019-12 等(只有年份和月份,没有天)。
请帮忙
一种解决方案是转换为日期时间,然后通过Series.dt.to_period或更改格式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')
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是不转换为日期时间,仅将-年份连接并转换为字符串:
#format 2010-Feb
df['Month Name-Year3'] = df['Year'].astype(str) + '-' + df['Month Name']
Run Code Online (Sandbox Code Playgroud)
...与转换为日期时间然后转换为自定义字符串相同:
#format 2010-Feb
df['Month Name-Year31'] = df['Month Name-Year'].dt.strftime('%Y-%b')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |