gpt4 book ai didi

python-3.x - 我如何根据纪元时间 ('attempt_updated_at' 列获得前半部分和后半部分)

转载 作者:行者123 更新时间:2023-12-04 00:21:35 25 4
gpt4 key购买 nike

所以,我想找出'Avg。每个 session 的前半部分和后半部分的难度级别',我找不到解决此问题的正确方法。
我使用纪元时间将 session 分为两半,然后找到平均难度级别。

session_id  question_difficulty     attempt_updated_at
5c822af21c1fba22 2 1557470128000
5c822af21c1fba22 3 1557469685000
5c822af21c1fba22 4 1557470079000
5c822af21c1fba22 5 1557472999000
5c822af21c1fba22 3 1557474145000
5c822af21c1fba22 3 1557474441000
5c822af21c1fba22 4 1557474299000
5c822af21c1fba22 4 1557474738000
5c822af21c1fba22 3 1557475430000
5c822af21c1fba22 4 1557476960000
5c822af21c1fba22 5 1557477458000
5c822af21c1fba22 2 1557478118000
5c822af21c1fba22 5 1557482556000
5c822af21c1fba22 4 1557482809000
5c822af21c1fba22 5 1557482886000
5c822af21c1fba22 5 1557484232000

我正在研究 python pandas(Jupter Notebook)。

代码明智我不知道从哪里开始。 (诺比警报)

我希望输出如下:

session_id 上半难度下半难度

最佳答案

IIUC,你可以用 pandas.qcut 将 epochs 切成 2 个相同大小的 bin(上半场/下半场)。然后使用 groupby.mean :

df.groupby(['session_id', pd.qcut(df.attempt_updated_at, q=2)])['question_difficulty'].mean()

[出去]
session_id        attempt_updated_at                  
5c822af21c1fba22 (1557469684999.999, 1557475084000.0] 3.500
(1557475084000.0, 1557484232000.0] 4.125
Name: question_difficulty, dtype: float64

或者,根据您如何定义“上半场”/“下半场”,您可能需要 pandas.cut 相反,使用 bins=2参数(在这种情况下,时间箱将等距隔开,而不是按照上面的 qcut 等尺寸):
df.groupby(['session_id', pd.cut(df.attempt_updated_at, bins=2)])['question_difficulty'].mean()

[出去]
session_id        attempt_updated_at                
5c822af21c1fba22 (1557469670453.0, 1557476958500.0] 3.444444
(1557476958500.0, 1557484232000.0] 4.285714
Name: question_difficulty, dtype: float64

更新

要为唯一的 session_id 计算不同的时间段,您可能首先必须按 session_id 分组。 ;对每组运行上述方法;最后, concat 结果。这是使用列表理解的示例:
groups_session_id = df.groupby('session_id')

pd.concat([g.groupby(['session_id', pd.cut(g['attempt_updated_at'], bins=2).astype(str)])
['question_difficulty'].mean() for _, g in groups_session_id])

更新 2

将这些平均值添加回您原来的 DataFrame ,您可以使用 DataFrame.merge :
df_avg_question_difficulty = pd.concat([g.groupby(['session_id', pd.cut(g['attempt_updated_at'], bins=2, labels = [1, 2]).astype(str)])
['question_difficulty'].mean().unstack(1) for _, g in groups_session_id])

df = df.merge(df_avg_question_difficulty, left_on='session_id', right_index=True)

关于python-3.x - 我如何根据纪元时间 ('attempt_updated_at' 列获得前半部分和后半部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56885297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com