多条件计数:pandas数据帧

时间:2017-03-28 07:32:54

标签: python pandas dataframe conditional-statements

用熊猫完成一项基本练习我有些麻烦。 下面是给定的数据帧:

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'])

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

由于

1 个答案:

答案 0 :(得分:2)

我认为您需要groupby aggregate agg - summean

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