【问题标题】:Percentage match in pandas Dataframe熊猫数据框中的百分比匹配
【发布时间】:2016-12-16 06:31:23
【问题描述】:

是否有一个函数可以告诉 pandas DataFrame 中匹配的百分比或数量而不做这样的事情......

len(trace_df[trace_df['ratio'] > 0]) / len(trace_df)
0.189

len(trace_df[trace_df['ratio'] <= 0]) / len(trace_df)
0.811

必须有一种更 Pythonic 或至少优雅的方式来做到这一点。

【问题讨论】:

    标签: python pandas pymc3


    【解决方案1】:

    找出一列的真实百分比的最 Pythonic 方法是简单地取布尔表达式的平均值。

    (trace_df['ratio'] > 0).mean()
    

    【讨论】:

    • 非常好。第二个值1 - (trace_df['ratio'] &gt; 0).mean()
    【解决方案2】:

    Ted 的回答很好,当然,只需将此回答视为对此的详细说明。如果有缺失值(通常是这样),请注意它们也将被视为 False,因为 pandas 只跟踪浮点数的缺失值,而不是布尔值。

    ser = pd.Series([-1,1,np.nan])
    (ser > 0).mean()
    0.33333333333333331
    

    同样,如果没有缺失值,Jezrael 提出的好观点仅适用于 Ted 的答案。 (在这种情况下,您将有 .333 + .333 != 1)

    这不一定是错误的(这与您的答案产生的相同),但如果您有缺失值,您可能更愿意在 Ted 的答案中添加一些额外的代码:

    (ser[ser.notnull()] > 0).mean()
    0.5
    

    我希望这不会被认为是 nit,但我认为这里值得注意,因为 mean() 的默认行为是排除缺失值,但是当您采用这样的布尔值的平均值时,您实际上是包括缺失值,可能导致意外结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 2015-10-07
      • 2020-04-17
      • 2021-08-17
      • 2018-12-23
      • 2021-10-17
      • 2021-05-19
      相关资源
      最近更新 更多