我在这里有一个问题。 我编写的程序可以做到这一点
df = pd.DataFrame({'STREAM':['EAGLE','HAWK','NORTH','HAWK','EAGLE','HAWK','NORTH'],'MAT':['A','D','F','D','C','C','E'],'KIS':['B','D','E','D','A','C','D']})
columns = ["A","B","C","D","E", "F"]
a = (pd.crosstab(df.STREAM,df.MAT, margins=True, margins_name='TOTAL').iloc[:,:-1].reindex(columns, axis=1, fill_value=0).rename_axis(None))
saved = a.to_csv(index=False)
a['TOT'] = a.sum(axis=1)
a['MEAN'] = a.mean(axis=1).round(2)
def x(i):
if i >5:
grade='A'
else:
grade='E'
return grade
a['GRD'] = a.MEAN.apply(x)
print(a)
这让我得到了一个结果
MAT A B C D E F TOT MEAN GRD
EAGLE 1 0 1 0 0 0 2 0.57 E
HAWK 0 0 1 2 0 0 3 0.86 E
NORTH 0 0 0 0 1 1 2 0.57 E
TOTAL 1 0 2 2 1 1 7 2.00 E
这接近我想要的,但是有一个问题,仅包括MAT。我是否可以在表格中同时包含“ MAT”和“ KIS”的总观测值,还可以删除表格左上角的名称“ MAT”(空白)?
编辑 预期产量
A B C D E F TOT MEAN GRD
EAGLE 2 1 1 0 0 0 4 0.?? E
HAWK 0 0 2 4 0 0 6 0.?? E
NORTH 0 0 0 1 2 1 4 0.?? E
TOTAL 2 1 3 5 2 1 14 ?? E