python - 多条件计数 : pandas dataframe

标签 python pandas dataframe conditional-statements

我在使用 pandas 完成基本练习时遇到了一些麻烦。 下面是给定的数据框:

model   serial   failure
  A       23        0
  B       12        1
  A       14        1
  A       12        0
  B       23        1
  C       34        1
  C       11        1

我需要返回一个新的数据框,其中包含以下列:model、failures_count、failures_ratio。

我的逻辑似乎是错误的,我不明白为什么会这样:

def failure_per_model(self):
    models = list(self.data.model.unique())
    table = []
    for model in models:
        model_count = self.data[self.data['model'] == model].shape[0]
        failures_count = sum(self.data['failure'][self.data['model'] == model])           
        failures_ratio = failures_count / model_count
        table.append([model, failures_count, failures_ratio])
    return pd.DataFrame(table, columns=['model', 'failures_count', 'failures_ratio'])

我实际上可以通过多种方式做到这一点,但是有人能够解释为什么这是不好的做法吗?

谢谢

最佳答案

我认为你需要groupbyagg聚合 - 总和平均值:

print (data.groupby('model')['failure']
           .agg({'failures_count': 'sum', 'failures_ratio': 'mean'})
           .reset_index())
  model  failures_ratio  failures_count
0     A        0.333333               1
1     B        1.000000               2
2     C        1.000000               2

print (data.groupby('model', as_index=False)['failure']
           .agg({'failures_count': 'sum', 'failures_ratio': 'mean'}))

  model  failures_ratio  failures_count
0     A        0.333333               1
1     B        1.000000               2
2     C        1.000000               2

关于python - 多条件计数 : pandas dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063278/

相关文章:

python - 使用 pandas 根据条件计算某个项目在单独数据框中出现的频率

python - pandas groupby 并用另一列的第一个值减去一列的最后一个值

python-2.7 - Pandas:将 'crop' 作为大型数据帧仅存储到前 1000 天的最佳方法是什么?

python - 如何显示每个Y轴的图表类型以区分比较因素

python - 将 qtDesigner .ui 文件链接到 python/pyqt?

python - Pandas:加入 extractall 的结果

python - pyqtgraph 中没有值

python - 遍历数组中所有可能的值,总和为 1

python - 从 Python2 升级到 Python3 时的字符串/字节问题

python - 如何附加到 Pandas DataFrame 中的各个列