【问题标题】:Computing average loop in Python based on certain conditions met in another column根据另一列中满足的某些条件计算 Python 中的平均循环
【发布时间】:2022-11-18 02:06:33
【问题描述】:

第一次在这里发帖并且是 Python 的新手,如果我遗漏了下面的任何关键信息,请提前致歉。

本质上,我有一个大的 CSV 文件,我可以在脚本上稍微清理一下,其中包含超过 150 英里数据的各种数值,每条数据线都是一英尺。在我稍微清理一下文件后,表格通常如下所示:

ABC Mile    Ft  Param1
A   1   1000    0.1234
A   1   1001    0.1111
A   1   1002    0.1221
A   1   1003    0.1511
B   1   1004    0.1999
B   1   1005    0.2011
B   1   1006    0.1878
B   1   1007    0.1999
C   1   1008    0.5321
C   1   1009    0.5333
C   1   1010    0.5445
C   1   1011    0.5655
C   1   1012    0.5852
A   1   1013    0.2788
A   1   1014    0.2899
A   1   1015    0.2901
A   1   1016    0.2921
A   1   1017    0.2877
A   1   1018    0.2896

对于此文件,“ABC”列将始终只等于 A、B 或 C。

我想要做的是对每组 A、B 和 C 的 Param1 数进行平均。因此,在上面的示例中,我希望获得 Param1 的平均值,当它等于 A 从 Ft 1000 到 1003 时,当它从 Ft 1004 到 1007 等于 B,从 Ft 1008 到 1012 等于 C,从 1013 到 1018 等于 A,依此类推。

我一直在研究 for 循环的使用,如下所示,但问题是我得到了 Param1 在整整一英里内等于 A 时的所有平均值,而不是每个分组。这是我到目前为止所拥有的:

for i in range(1,df['Mile'].max()):
     avg_p1 = df.loc[(df['Mile'] == i) & (df['ABC'] =='A'), 'Param1'].mean()
     print(avg_p1)

但在这种情况下,当 ABC = A 时,我得到了 Param1 的平均值。在上面的表格示例中,当 ABC = A 从 Ft 1000 到 1003 和 1013 到 1018 时,我想要 Param1 的平均值,作为在整个文档中重复的单独平均值。

是否需要在上面的现有循环中添加第二个 for 循环或某种 if/else 条件?对这位新手程序员的任何帮助将不胜感激:)

【问题讨论】:

    标签: python pandas for-loop mean


    【解决方案1】:
    df.groupby('ABC')['Ft'].mean()
    

    输出:

    ABC
    A    1009.9
    B    1005.5
    C    1010.0
    Name: Ft, dtype: float64
    

    【讨论】:

    • 谢谢,但我希望在我刚刚编辑的 ABC=A 时计算 Param1 的平均值。如前所述,我希望获得 A 的单独平均值,即从 Ft = 1000 到 1003 和从 Ft = 1013 到 1018 的单独数字。我希望这更有意义!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多