python - 获取 Pandas 数据框中满足特定条件的行(字符串)的百分比

标签 python pandas pandas-groupby

我有这个数据框:

df = pd.DataFrame({"A": ["Used", "Not used", "Not used", "Not used", "Used",
                         "Not used", "Used", "Used", "Used", "Not used"],
                   "B": ["Used", "Used", "Used", "Not used", "Not used",
                        "Used", "Not used", "Not used", "Used", "Not used"]})

我想找到最快、最干净的方法来找出以下内容:

  • 所有行中使用过A的行的百分比。
  • 所有行中使用过B的行的百分比。
  • 所有行中使用过A和B的行的百分比。

我是 Python 和 pandas(以及一般的编码)的新手,所以我确信这非常简单,但是任何指导都将不胜感激。我试过 groupby().aggregate(sum) 但我没有得到我需要的结果(我想是因为这些是字符而不是整数。

最佳答案

如果需要所有值百分比使用 value_counts使用 normalize=True,用于多列 groupbysize对于所有对的长度,并将其除以 df 的长度(与索引的长度相同):

print (100 * df['A'].value_counts(normalize=True))
Not used    50.0
Used        50.0
Name: A, dtype: float64

print (100 * df['B'].value_counts(normalize=True))
Not used    50.0
Used        50.0
Name: B, dtype: float64

print (100 * df.groupby(['A','B']).size() / len(df.index))
A         B       
Not used  Not used    20.0
          Used        30.0
Used      Not used    30.0
          Used        20.0
dtype: float64

如果需要过滤值,创建掩码并获取 mean - True1 一样处理:

print (100 * df['A'].eq('Used').mean())
#alternative
#print (100 * (df['B'] == 'Used').mean())
50.0

print (100 * df['B'].eq('Used').mean())
#alternative
#print (100 * (df['B'] == 'Used').mean())
50.0

print (100 * (df['A'].eq('Used') & df['B'].eq('Used')).mean())
20.0

关于python - 获取 Pandas 数据框中满足特定条件的行(字符串)的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487748/

相关文章:

python - Mac OS X 上的 wxPython 2.9

python - Pandas 应用类型错误 : 'float' object is not subscriptable

python - 计算 DataFrame 中的行增量值

python - 如何使用 pandas.Series.str.contains 搜索字符加上

python - 使用 pandas,如何对 bool 列为 true 的情况进行分组/聚合求和?

python - 如何在groupby之后创建变量

Python、Tkinter;取消选中复选框时如何使用 grid_forget() ?

javascript - nvd3 "line plus bar chart"示例未显示

python - 使用 python requests 模块进行网页抓取时出现错误

python - 在Python中使用groupby计算平均差异