【问题标题】:Python dataframe interactionPython 数据框交互
【发布时间】:2017-09-30 05:31:30
【问题描述】:

我有以下数据框:

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

新的数据框应该代表学生之间通过主题进行的互动。它应该包含四列:“学生来源”、“学生目的地”、“”和“回复次数”。

学生目的地是每个学生与之分享主题的学生。

回复计数Student Destination“直接”回复Student Source的次数。

新的数据框应该如下所示:

st_source st_dest  week  reply_count
    a        b       1        1
    a        b       2        2
    b        a       1        1
    b        a       2        1

回复次数可以用一个例子更容易解释。

如果一个线程由学生 A(通过在级别 1 发送消息)启动,B 回复 A(在级别 2 发送消息),C 回复 B(在级别 3 发送消息)。然后B“直接”回复A,C“直接”回复 B,但是 C 对 A 的回复不是直接的(所以我们不算)。

有人知道吗?

提前谢谢你!

【问题讨论】:

  • 你有没有尝试过?这看起来像是一道作业题。

标签: python pandas pycharm


【解决方案1】:
result = (df.groupby('week').apply(
        lambda g: g.groupby([g.student.shift(), g.student])
        .week.agg({'reply_count': 'count'})
        .rename_axis(("st_source", "st_dest"))
    ).reset_index())
​
result[['st_source', 'st_dest', 'week', 'reply_count']].sort_values(['st_source', 'st_dest'])

# st_source     st_dest   week  reply_count
#0        a         b        1          1
#2        a         b        2          2
#1        b         a        1          1
#3        b         a        2          1

【讨论】:

  • 感谢@Psidom 的建议!我有一个稍微不同的解决方案。学生来源和目的地是同一个人。可能是因为我的学生比示例中给出的要多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2018-12-15
  • 1970-01-01
  • 2018-10-09
  • 2011-01-06
  • 2012-02-28
  • 1970-01-01
相关资源
最近更新 更多