pandas 数据框中的百分比匹配

Percentage match in pandas Dataframe

是否有一个函数可以告诉 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 或至少优雅的方式来做到这一点。

查找列的百分比的最 pythonic 方法是简单地取布尔表达式的平均值。

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

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

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