我在使用 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'])
我实际上可以通过多种方式做到这一点,但是有人能够解释为什么这是不好的做法吗?
谢谢
最佳答案
我认为你需要groupby
与 agg
的聚合
- 总和
和平均值
:
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/