【发布时间】:2023-01-23 15:02:37
【问题描述】:
我有一个如下所示的数据框
stu_id,Mat_grade,sci_grade,eng_grade
1,A,C,A
1,A,C,A
1,B,C,A
1,C,C,A
2,D,B,B
2,D,C,B
2,D,D,C
2,D,A,C
tf = pd.read_clipboard(sep=',')
我的目标是
a) 找出学生在Mat_grade、sci_grade和eng_grade下获得了多少个不同的唯一成绩
所以,我尝试了以下
tf['mat_cnt'] = tf.groupby(['stu_id'])['Mat_grade'].nunique()
tf['sci_cnt'] = tf.groupby(['stu_id'])['sci_grade'].nunique()
tf['eng_cnt'] = tf.groupby(['stu_id'])['eng_grade'].nunique()
但这并没有提供预期的输出。因为,我有超过 100K 个唯一 ID,任何高效优雅的解决方案都非常有帮助
我希望我的输出如下所示
【问题讨论】:
-
tf.groupby('stu_id').nunique()怎么样? -
@ShubhamSharma - 感谢您的建议。在示例中,我没有提供额外的列,但在实际数据中,有额外的列。因此,不需要所有列的唯一性。但是,是的,从你那里知道它也可以对整个数据框完成很有用
-
如果在这种情况下您有多个列,您可以使用以下方式过滤所需的列:
tf.filter(like='_grade').groupby('stu_id').nunique()
标签: python pandas list dataframe pandas-groupby