Edd*_*045 2 python dataframe pandas
我有一个 pandas df,它有一个项目编号列表,然后旁边有一个数字。我想以某种方式获得所有相同项目编号及其旁边的数字的平均值。
这是数据框的一部分:
Item ID Time
X32TR2639 7.142857
X32TR2639 7.142857
X36SL7708 16.714286
X36TA0029 16.714286
X36TR3016 16.714286
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Item ID Average Time:
X32TR2639 7.142857
X36SL7708 16.714286
X36TA0029 16.714286
X36TR3016 16.714286
Run Code Online (Sandbox Code Playgroud)
我希望每个项目 ID 都有一个平均时间,但是如果该项目 ID 有多个副本,则取它们的平均值
这只是数据框的一小部分。如您所见,前两个是相同的。我想计算所有这些的平均值。因此,如果相同,请使用所有这些数字并得出平均值。因此,脚本将查找所有项目编号X32TR2639并获取其旁边的编号,然后得出平均值。
小智 6
我会建议一个简单的groupby.mean和一个reset_index.
data = {"Item ID":['X32TR2639','X32TR2639','X36SL7708','X36TA0029','X36TR3016'],'time':[7.142857,7.142857,16.714286,16.714286,16.714286]}\n\ndf = pd.DataFrame(data)\n\ndf.groupby('Item ID').mean().reset_index()\n\n Item ID time\n0 X32TR2639 7.142857\n1 X36SL7708 16.714286\n2 X36TA0029 16.714286\n3 X36TR3016 16.714286\nRun Code Online (Sandbox Code Playgroud)\n我尝试过 50k 数据,这是时间性能。
\ndf\n\n ID time\n0 X32TR2639 0.837810\n1 X32TR2639 0.855781\n2 X36SL7708 0.322786\n3 X36TA0029 0.441353\n4 X36TR3016 0.254487\n ... ...\n49995 X32TR2639 0.885251\n49996 X32TR2639 0.315009\n49997 X36SL7708 0.298589\n49998 X36TA0029 0.229855\n49999 X36TR3016 0.933437\n\n[50000 rows x 2 columns]\n\n%timeit df.groupby('ID').mean().reset_index()\n4.76 ms \xc2\xb1 73.7 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\nRun Code Online (Sandbox Code Playgroud)\ngroupby.mean这是在 50k 数据帧上执行重复操作后的输出数据帧。
df.groupby('ID').mean().reset_index()\n\n ID time\n0 X32TR2639 0.493729\n1 X36SL7708 0.500936\n2 X36TA0029 0.501064\n3 X36TR3016 0.492773\nRun Code Online (Sandbox Code Playgroud)\n