【发布时间】: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