首页 > 解决方案 > pandas groupby 并表示某列是否有某个值

问题描述

有很多类似的问题,但没有一个能完全解决我的问题。

我有一个用户和位置的熊猫数据框。用户可以有多个位置。我想转换数据,以便每个用户在列中有一个位置。为此,我想检查用户是否将“纽约”作为位置,否则放置“其他”。

因此,user1 值:

 user1 : New York

  user1 : Boston

输出是:

 user 1: New York

 user 1: New York

然后 user2 值:

 user2: Boston

 user2: San Fran

输出是:

user2: Other

user2: Other

我试过这个:

group_by_user = sample['office_type'].groupby(sample['user']) 
sample.loc[:,'office_type2'] = ['New York' if ele == 'New York' else 'Other' for ele in sample['office_type']]

但这并没有在两行中填充“纽约”,而是填充:

 user1: New York

 user1: Other

我希望它填充

 user1: New York

 user1: New York

标签: pandasdataframepandas-groupby

解决方案


IIUC 让我们做transformwith any,它将groupby用户检查它是否有任何 new york,如果有,对于用户返回 True 的所有行

s=sample['office_type'].eq('New York').groupby(sample['user']).transform('any')
sample.loc[:,'office_type']=s.map({True:'New York', False: 'Other'} )

推荐阅读