我有以下程序:
df = pd.DataFrame({'student':['a'] * 4 + ['b'] * 6,
'semester':[1,1,2,2,1,1,2,2,2,2],
'passed_exam':[True, False] * 5})
print (df)
passed_exam semester student
0 True 1 a
1 False 1 a
2 True 2 a
3 False 2 a
4 True 1 b
5 False 1 b
6 True 2 b
7 False 2 b
8 True 2 b
9 False 2 b
table = df.groupby(["student","semester","passed_exam"])
.size()
.unstack(fill_value=0)
.rename_axis(None, axis=1)
.reset_index()
print (table)
student semester False True
0 a 1 1 1
1 a 2 1 1
2 b 1 1 1
3 b 2 2 2
我想在第二个数据框中添加一个新列,用于计算学生总数。像这样:
student semester False True Total_St
0 a 1 1 1 4
1 a 2 1 1 4
2 b 1 1 1 6
3 b 2 2 2 6
有什么想法吗?
提前谢谢!
答案 0 :(得分:2)
由于该表每个学生有两行,一种方法是使用原始df查找学生计数并映射到表
table['total_st'] = table['student'].map(df.groupby('student').size())
passed_exam student semester False True total_st
0 a 1 1 1 4
1 a 2 1 1 4
2 b 1 1 1 6
3 b 2 2 2 6
答案 1 :(得分:1)
Groupby'学生',使用大小来计算它们,然后与表合并:
table.merge(pd.DataFrame(df.groupby('student').size()).reset_index(), on='student')