Python 提取一个新的数据框

标签 python pandas dataframe group-by

我有一个数据框:

  topic  student level week
    1      a       1     1
    1      b       2     1
    1      a       3     1
    2      a       1     2
    2      b       2     2
    2      a       3     2
    2      b       4     2
    3      c       1     2
    3      b       2     2
    3      c       3     2
    3      a       4     2
    3      b       5     2

我想提取主题中学生的一些消息并创建一个包含三列的新 df:

  student  topic  messages
     a       1        2
     a       2        2
     a       3        1
     b       1        1
     b       2        2
     b       3        2
     c       3        2

我想跳过包含 0 条消息的行。

有人有什么建议吗?

谢谢!

最佳答案

您可以使用 groupby + size + reset_index :

df = df.groupby(['student','topic']).size().reset_index(name='messages')
print (df)
  student  topic  messages
0       a      1         2
1       a      2         2
2       a      3         1
3       b      1         1
4       b      2         2
5       b      3         2
6       c      3         2

关于Python 提取一个新的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43820340/

相关文章:

python - 如何通过给出y访问数组x?

python - 我的 Django 应用程序中由 uwsgi 启动的日志记录在哪里?

python - 为什么 python C 扩展在 realloc 之后丢失了指针跟踪?

Python - groupby 上的 Pandas 小计

python - 如何根据另一个数据框的条件创建新的数据框

python - Theano:如何将所需输出(1d)和标签之间的距离实现为成本函数

python - 标记 pandas 数据框中日期范围内的日期时间列表

python - 按组运行重复值的计数

R 通过查找字典来替换列

python - 删除 pandas 中值不增加的列