假设我有以下日期时间列表:
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]]
答案 0 :(得分:2)
由Series.groupby
使用year
month
与size
并转换为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]]