基于我之前的一个question,我计算了一周中每小时和每一天的文本数量:
time_df = df.groupby(
[
df["timestamp"].dt.dayofweek.rename("day_of_week"),
df["timestamp"].dt.hour.rename("hour")
]
).size().reset_index(name="count")
字符串
此代码返回以下输出:
day_of_week hour count
0 0.0 0.0 21195
1 0.0 1.0 13955
2 0.0 2.0 12767
3 0.0 3.0 17839
4 0.0 4.0 32762
.. ... ... ...
163 6.0 19.0 132838
164 6.0 20.0 129431
165 6.0 21.0 106678
166 6.0 22.0 69817
167 6.0 23.0 38262
[168 rows x 3 columns]
型
现在我想计算工作日的平均数,也就是说,如果day_of_week
是0
,那么列count
中的数字必须除以该月的星期一数,如果是1
,那么必须除以星期二数,依此类推。
如果我从size()
改为mean()
,我会得到错误:
TypeError: agg function failed [how->mean,dtype->object]
型
这不是我想要的
我试图添加一个新的列day_of_week
到原来的嵌套框架和计数的块的数量与相同的值,然后使用它的计算,但我不知道如何做到这一点。
有什么建议吗?
更新
抱歉,我没说清楚。
问题中的数据框是分组后从原始数据框中获得的唯一数据框,这意味着它包含一周中每一天的24个条目,每小时一个。
原始的框架是这样的:
timestamp text
2023-01-01 00:00:00 ABC
2023-01-01 00:00:01 DEF
2023-01-01 00:00:01 GHI
...
型
我添加了一个新列day_of_week
:
timestamp text day_of_week
2023-01-01 00:00:00 ABC 6
2023-01-01 00:00:01 DEF 6
2023-01-01 00:00:01 GHI 6
...
型
从这一个我想计算平均数的文本数量为每小时和每一天的一周。
例如,我在星期一有0.0
的21195
文本,我在这个月有4个星期一,平均值是:21195 / 4 = 5298.75
,所以这个框架将是:
day_of_week hour count num_of_day_of_week mean
0 0.0 0.0 21195 4 5298.75
1 0.0 1.0 13955 4 3488.75
2 0.0 2.0 12767 4 3191.75
3 0.0 3.0 17839 4 4459.75
4 0.0 4.0 32762 4 8190.50
.. ... ... ... ... ...
型
很抱歉造成了混乱,希望现在好些了。
2条答案
按热度按时间jckbn6z71#
几个观察结果:
1.给定的代码失败,因为它试图在字符串列(文本)上应用聚合函数(mean)。
1.在这个例子中,21195是星期一第0小时的“文本”数量。记住,这是所有月份、星期的文本数量。所以21195是Jan的星期一第0小时文本+Feb的星期一第0小时文本的总和......等等。所以21195除以4是任意的。另外,记住,有些月份可以有5个星期一。
从你的问题听起来你想找到每周平均的DoW,每个月的小时明智的文本。
将
Month
、Week
、DoW
、HoD
列添加到原始df
:字符串
现在找到每个月每个星期每个DoW每个小时的文本数量:
型
现在找到每个月的每周平均DoW,小时明智的文本:
型
注意-关于第2点,如果你的数据被限制在一个月内,你可以省略上面的Month列,因为它不会有什么不同,但明智的做法是将来证明你的代码来处理未来的用例。
uajslkp62#
创建虚拟列以计算数值列的均值:您可以用途:
字符串
输出量:
型
另一种方法是使用
groupby_transform
:型
性能:
型