【问题标题】:Split the Datetime into Year and Month column in python在python中将日期时间拆分为年和月列
【发布时间】:2021-05-07 12:56:49
【问题描述】:

我们如何将日期时间值拆分为年份和月份,并且需要拆分列年份 (2017_year, 2018_year 等等...) 和 year 列下的值应该得到相应年份的月份?

示例数据:

call time            area    age
2017-12-12 19:38:00  Rural   28
2018-01-12 22:05:00  Rural   50
2018-02-12 22:33:00  Rural   76
2019-01-12 22:37:00  Urban   45
2020-02-13 00:26:00  Urban   52

所需输出:

call time            area    age   Year_2017  Year_2018
2017-12-12 19:38:00  Rural   28      jan          jan
2018-01-12 22:05:00  Rural   50      Feb          Feb 
2018-02-12 22:33:00  Rural   76      mar          mar
2019-01-12 22:37:00  Urban   45      Apr          Apr
2020-02-13 00:26:00  Urban   52      may          may

【问题讨论】:

  • 您所需的输出似乎错误。第二行应该是一月??即使日期是例如,为什么两列都被填满2017 年?
  • 很抱歉,其实我是手动写的例子。

标签: python-3.x pandas dataframe data-science data-analysis


【解决方案1】:

我认为您需要从 call time 日期时间生成年份和月份,因此输出不同:

说明 - 首先通过DataFrame.assignSeries.dt.strftime 生成月份列,然后使用append=TrueMultiIndex 将年份转换为索引,因此可能通过Series.unstack 重塑,最后添加到原始:

df1 = (df.assign(m = df['call time'].dt.strftime('%b'))
         .set_index(df['call time'].dt.year, append=True)['m']
         .unstack()
         .add_prefix('Year_'))
print (df1)
call time Year_2017 Year_2018 Year_2019 Year_2020
0               Dec       NaN       NaN       NaN
1               NaN       Jan       NaN       NaN
2               NaN       Feb       NaN       NaN
3               NaN       NaN       Jan       NaN
4               NaN       NaN       NaN       Feb


df = df.join(df1)
print (df)
            call time   area  age Year_2017 Year_2018 Year_2019 Year_2020
0 2017-12-12 19:38:00  Rural   28       Dec       NaN       NaN       NaN
1 2018-01-12 22:05:00  Rural   50       NaN       Jan       NaN       NaN
2 2018-02-12 22:33:00  Rural   76       NaN       Feb       NaN       NaN
3 2019-01-12 22:37:00  Urban   45       NaN       NaN       Jan       NaN
4 2020-02-13 00:26:00  Urban   52       NaN       NaN       NaN       Feb

【讨论】:

  • 感谢@jezral 以及为什么我们需要设置索引调用时间
  • @manojkumar - 因为添加了years 到index,所以可以使用unstack 将年份转换为列。
猜你喜欢
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多