首页 > 解决方案 > 如何在小时内获取元素数

问题描述

我正在使用 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

我想在一个新列中查看结果,其中包含每天的平均计数

标签: pythonpandas

解决方案


如果想要f_value新列中每列的平均日期时间,请使用GroupBy.transformwithmean然后转换为日期时间:

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

推荐阅读