python - 如何在小时内获取元素数
问题描述
我正在使用 python 3.7.6 运行。
我有一张如下表:
f_value desc time
1 f1 null 1583591256000
2 f2 null 1583591356000
3 f1 TBD1 1583591256000
4 f3 TBD2 1583591259000
5 f4 TBD4 1583591256000
6 f1 TBD5 1583592256000
7 f1 null 1583593256000
8 f1 TBD5 1583592256000
9 f2 TBD5 1583592252000
10 f1 TBD5 1583592956000
时间列表示从 1970 年开始的时间(以毫秒为单位)。
我想分组f_value
并获得每天的平均行数。
我该怎么做 ?
我们如何从time
现场获得一天并获得每组天数的平均值f_value
?
我想在一个新列中查看结果,其中包含每天的平均计数
解决方案
如果想要f_value
新列中每列的平均日期时间,请使用GroupBy.transform
withmean
然后转换为日期时间:
df['new'] = pd.to_datetime(df.groupby('f_value')['time'].transform('mean'), unit='ms')
print (df)
f_value desc time new
1 f1 NaN 1583591256000 2020-03-07 14:43:26
2 f2 NaN 1583591356000 2020-03-07 14:36:44
3 f1 TBD1 1583591256000 2020-03-07 14:43:26
4 f3 TBD2 1583591259000 2020-03-07 14:27:39
5 f4 TBD4 1583591256000 2020-03-07 14:27:36
6 f1 TBD5 1583592256000 2020-03-07 14:43:26
7 f1 NaN 1583593256000 2020-03-07 14:43:26
8 f1 TBD5 1583592256000 2020-03-07 14:43:26
9 f2 TBD5 1583592252000 2020-03-07 14:36:44
10 f1 TBD5 1583592956000 2020-03-07 14:43:26
如果需要新列中每天的计数数,请GroupBy.size
使用Series.dt.date
:
g = pd.to_datetime(df['time'], unit='ms').dt.date
df['new'] = df.groupby(['f_value', g])['time'].transform('size')
print (df)
f_value desc time new
1 f1 NaN 1583591256000 6
2 f2 NaN 1583591356000 2
3 f1 TBD1 1583591256000 6
4 f3 TBD2 1583591259000 1
5 f4 TBD4 1583591256000 1
6 f1 TBD5 1583592256000 6
7 f1 NaN 1583593256000 6
8 f1 TBD5 1583592256000 6
9 f2 TBD5 1583592252000 2
10 f1 TBD5 1583592956000 6