【问题标题】:Multi-condition count: pandas dataframe多条件计数:熊猫数据框
【发布时间】:2017-08-21 03:45:26
【问题描述】:

我在完成一个 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 功能。但是如果需要一些特殊情况,则必须使用 cusom,因为 pandas 中没有这种特殊功能。
  • 非常感谢,我倾向于省略已实现的功能,但我承认它更简洁。

标签: python pandas dataframe conditional-statements


【解决方案1】:

我认为你需要 groupbyaggregate by 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

【讨论】:

  • 谢谢,我以前从没用过 groupby,应该承认它更干净!
  • @Spikist 也随时为答案投票。不胜感激。
  • @piRSquared - 谢谢。
  • @piRSquared 其实我刚刚达到了最低分数,呵呵!可能是我给 jezrael 的最后一条信息,现在已经完成了。
  • @Spikist 实际上,我看到你得了 10 分……我赞成你的问题,这样你就有 15 分……然后我请你赞成 :-)
猜你喜欢
  • 2021-11-08
  • 2020-10-14
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 2023-02-20
  • 2019-12-21
  • 2019-06-21
  • 2016-12-11
相关资源
最近更新 更多