【问题标题】:Why is this Groupby transform not working?为什么这个 Groupby 转换不起作用?
【发布时间】:2021-12-20 08:14:57
【问题描述】:

对于一个虚拟数据集,每个id对应一个匹配:

df2 = pd.DataFrame(columns=['id', 'score', 'duration', 'user'],
                  data=[[1, 800, 60, 'abc'], [1, 900, 60, 'zxc'], [2, 800, 250, 'abc'], [2, 5000, 250, 'bvc'],
                        [3, 6000, 250, 'zxc'], [3, 8000, 250, 'klp'], [4, 1400, 500,'kod'],
                        [4, 8000, 500, 'bvc']])

如果我只想保留其中一个相同 id 的持续时间大于 120 且得分大于 1500 的记录,这可以正常工作:

cond = df2['duration'].gt(120) & df2['score'].gt(1500)
out = df2[cond.groupby(df2['id']).transform('all')]

并返回相同 id 的 2 个实例。但是,如果我只想保留用户为“abc”的 id 对,则它不起作用。我试过了:

out = df2[(df2['user'].eq('abc')).groupby(df2['id']).transform('all')]
out = df2[(df2['user'] == 'abc').groupby(df2['id']).transform('all')]

他们都返回空白的df。如何解决这个问题呢?结果应该是用户“abc”参加的任何比赛。

【问题讨论】:

  • 您似乎没有任何id 组的all 值等于abc 也许您的意思是any
  • 你想要'any',而不是'all'。 " 其中任何一个相同的 id" = "至少一个" = "任何"
  • 谢谢你们,现在我明白了:) 将其发布为答案,我会将其标记为正确答案
  • @idontknowmuch done

标签: python pandas pandas-groupby


【解决方案1】:

在 cmets 中,您想要的是 'any',而不是 'all'

out = df2[(df2['user'] == 'abc').groupby(df2['id']).transform('any')]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2015-09-25
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多