sql - 计算 pandas 数据框中的不同值

标签 sql pandas jupyter-notebook

我有一个包含 3 列的数据框。我试图为行中的每个组找到不同的聚合值。

我正在使用 jupyter 笔记本来运行它。还使用 python 库,如 numpy

例如,我的原始数据框“df”如下:

    Name    Subject Grade
0   Tom     Math    20
1   Tom     Sci     30
2   Tom     Eng     10
3   Tom     Math    40
4   John    Math    30

我想计算学生参加特定考试的次数以及两次考试的成绩总和。

我按如下方式应用了 groupby 查询:

new_df = df.groupby(['Name', 'Subject']).agg({ 'Grade': np.sum, 'Subject': np.size})

但是这正如预期的那样只产生了 2 列。它确实以行的形式显示了每个学生每个科目的总分。

我还尝试使用交叉表:

pd.crosstab(df.Name,df.Subject)

但我不知道如何合并 Sum 的聚合函数。

我的预期输出如下:

    Name    Eng Math    Sci GradeEng    GradeMath   GradeSci
0   John    0   30      0   0           1           0
1   Tom     10  60      30  1           2           1

最佳答案

它更多的是两个聚合函数的枢轴问题,

new_df = df.pivot_table(index = 'Name', columns = 'Subject', values = 'Grade', aggfunc = ['sum', 'size'], fill_value=0)\
.rename(columns = {'sum':'', 'size':'Grade'})

new_df.columns = new_df.columns.map(''.join)

new_df.reset_index(inplace = True)

    Name    Eng Math    Sci GradeEng    GradeMath   GradeSci
0   John    0   30      0   0           1           0
1   Tom     10  60      30  1           2           1

使用groupby可以得到相同的结果,你需要unstack dataframe

df.groupby(['Name', 'Subject']).agg({ 'Grade': np.sum, 'Subject': np.size}).unstack().fillna(0).astype(int)

关于sql - 计算 pandas 数据框中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55408605/

相关文章:

php - SQL - 将多个行值插入到单个列中

mySQL 在具有有效语法的子查询上给出语法错误

php - 数据库删除具有相同值的行

python - 将嵌套字典转换为数据帧,其中键作为行名,值中的字典作为列?

python - 如何检查 Pandas DataFrame 的稀疏性?

python - 如何以编程方式将单元格添加到 IPython 或 Jupyter notebook?

sql - 将时间戳转换为整数问题

python - 通过追加 pandas 中不同数据帧的列来创建列

python - 在 jupyter notebook 中用 python 循环播放声音

python - 安装Jupyter笔记本的困难