用熊猫完成一项基本练习我有些麻烦。 下面是给定的数据帧:
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'])
我实际上可以在很多方面做到这一点,但有人能够解释为什么这是不好的做法吗?
由于
答案 0 :(得分:2)
我认为您需要groupby
aggregate
agg
- sum
和mean
:
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