【问题标题】:How to use groupby on the following dataset如何在以下数据集上使用 groupby
【发布时间】:2019-05-27 11:00:08
【问题描述】:

我有这个数据集,

sender          team_id     receiver
John Cena         1           Margaret
Genghis Khan      2           Mahathma
Mahathma Gandhi   1           John
John Doe          2           Genghis
Margaret Thatcher 1           John

每个发件人都有一个团队 ID,收件人的名字只是他们的名字。我想知道每条消息是否在团队成员之间。结果看起来像这样。

sender          team_id     receiver       btwn_teammates
John Cena         1           Margaret          Yes
Genghis Khan      2           Mahathma          No
Mahathma Gandhi   1           John              Yes
John Doe          2           Genghis           Yes
Margaret Thatcher 1           John              Yes

【问题讨论】:

  • 如何解决发送到John 的歧义,可能是John CenaJohn Doe?在最后一行中,提供了John Cena 的全名,这违反了receiver 只包含名字的假设。一般来说,哪个系统只记录收件人的名字,您可以将其更改为记录他们的全名吗?
  • John Doe 和 Ghengis 应该是 Yes 吗?
  • 很抱歉。数据集已经存在,我无法更改它。团队中最多有 10 人。一个团队中没有两个名字相同的人。它不需要 100% 准确。只要离结果表足够近,完全没问题。
  • @Lollz 是的。你说的对。我的坏
  • @Peter Leimbigler。约翰塞纳部分是我的错误。刚刚修好了。我猜制作它的人没有考虑到这一点。这是我唯一拥有的东西,我无法改变它。

标签: pandas pandas-groupby


【解决方案1】:

合并名称+team_id的第一部分,然后映射指标值:

df2 = df[['sender', 'team_id']].rename(columns={'sender': 'receiver'})
df2['receiver'] = df2.receiver.str.split().str[0]
df2 = df2.drop_duplicates()  # So left merge preserves size.

df = df.merge(df2, how='left', indicator='btwn_team')
df['btwn_team'] = df.btwn_team.map({'both': 'Yes', 'left_only': 'No'})

输出:

              sender  team_id  receiver btwn_team
0          John Cena        1  Margaret       Yes
1       Genghis Khan        2  Mahathma        No
2    Mahathma Gandhi        1      John       Yes
3           John Doe        2   Genghis       Yes
4  Margaret Thatcher        1      John       Yes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2023-02-22
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多