Python计算dataframe列中值的频率

时间:2017-03-10 17:14:07

标签: python pandas

我有以下程序:

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

有什么想法吗?

提前谢谢!

2 个答案:

答案 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')