将日期时间列表转换为包含特定年份和月份的日期时间计数的列表列表

时间:2018-12-18 11:17:30

标签: python pandas dataframe

假设我有以下日期时间列表:

datetimes = ['05.06.2018 11:11:11', '05.06.2018 11:11:05', '05.06.2018 11:11:00', '05.06.2018 11:10:17', '05.06.2018 11:10:10', '05.06.2018 11:10:04', '05.06.2018 11:09:58', '05.06.2018 11:09:52', '05.06.2018 11:09:39', '05.06.2018 11:09:27', '04.06.2018 11:48:01', '04.06.2018 11:47:58', '04.06.2018 11:47:55', '04.06.2018 11:47:52', '04.06.2018 11:47:49', '04.06.2018 11:47:47', '04.06.2018 11:47:44', '04.06.2018 11:47:41', '04.06.2018 11:47:30', '04.06.2018 11:47:22', '04.06.2018 11:47:18', '04.06.2018 11:47:15', '04.06.2018 11:47:10', '04.06.2018 11:47:07', '04.06.2018 11:47:04', '04.06.2018 11:47:02', '04.06.2018 11:46:59', '04.06.2018 11:46:55', '04.06.2018 11:46:53', '04.06.2018 11:46:50', '04.06.2018 11:46:47', '04.06.2018 11:46:44', '04.06.2018 11:46:41', '04.06.2018 11:46:38', '04.06.2018 11:46:35', '04.06.2018 11:46:32', '04.06.2018 11:46:27', '04.06.2018 11:46:24', '04.06.2018 11:46:21', '04.06.2018 11:46:19', '04.06.2018 11:46:16', '04.06.2018 11:46:13', '04.06.2018 11:46:10', '04.06.2018 11:46:07', '04.06.2018 11:46:04', '04.06.2018 11:46:01', '04.06.2018 11:45:58', '04.06.2018 11:45:27', '04.06.2018 11:45:24', '04.06.2018 11:45:21', '04.06.2018 11:45:18', '04.06.2018 11:45:16', '04.06.2018 11:45:13', '04.06.2018 11:45:10', '04.06.2018 11:44:17', '04.06.2018 11:44:14', '04.06.2018 11:44:10', '04.06.2018 11:44:07', '04.06.2018 11:44:04', '04.06.2018 11:44:01', '04.06.2018 11:43:57', '04.06.2018 11:43:53', '04.06.2018 11:43:15', '04.06.2018 11:41:48', '26.06.2017 12:04:24', '08.05.2017 11:32:03', '06.04.2017 10:20:04', '06.03.2017 11:21:59', '23.02.2017 11:34:23', '20.02.2017 09:49:23', '15.02.2017 11:17:23', '14.02.2017 10:00:53', '09.02.2017 14:13:09', '08.02.2017 12:51:51', '08.02.2017 12:50:49', '07.02.2017 13:31:40', '07.02.2017 13:30:45', '06.02.2017 12:20:44', '01.02.2017 11:51:06', '01.02.2017 11:31:33', '24.01.2017 11:12:23', '24.01.2017 10:59:01', '24.01.2017 10:57:42', '23.01.2017 11:15:06', '18.01.2017 12:57:40', '18.01.2017 10:26:22', '17.01.2017 12:02:10', '17.01.2017 12:00:51', '16.01.2017 11:23:39', '16.01.2017 11:21:32', '16.01.2017 11:15:47', '16.01.2017 11:12:24', '13.01.2017 11:15:18', '13.01.2017 11:14:06', '13.01.2017 11:13:29', '12.01.2017 13:33:57', '12.01.2017 13:33:29', '11.01.2017 13:32:47', '11.01.2017 13:19:55']

通过Pandas或纯Python创建列表的最佳方法是多少年,其中每个列表将包含12个整数,分别表示特定年份下特定月份的日期时间计数?

例如,如果datetimes中只有两年,则output将是两个列表的列表,如下所示:

output = [[32, 12, 43, 54, 12, 34, 98, 56, 99, 100, 3213, 456], [76, 876, 233, 12, 121, 3342, 66, 44, 87, 1765, 321, 56]]

1 个答案:

答案 0 :(得分:2)

Series.groupby使用year monthsize并转换为list s:

datetimes = pd.Series(pd.to_datetime(datetimes))

L = (datetimes.groupby([datetimes.dt.year, datetimes.dt.month])
              .size()
              .groupby(level=0)
              .apply(list)
              .tolist())
print (L)
[[17, 4, 4, 2, 3, 1, 2, 2], [54, 10]]

如果还要在缺少的月​​份中添加0,请在reindex之前添加MultiIndex.from_product

datetimes = pd.Series(pd.to_datetime(datetimes))

y = datetimes.dt.year
m = datetimes.dt.month
mux = pd.MultiIndex.from_product([y.unique(), np.arange(1, 13)])

L = (datetimes.groupby([y, m])
              .size()
              .reindex(mux, fill_value=0)
              .groupby(level=0)
              .apply(list)
              .tolist()
              )
print (L)

[[17, 4, 0, 0, 0, 4, 2, 3, 1, 0, 2, 2], [0, 0, 0, 54, 10, 0, 0, 0, 0, 0, 0, 0]]