pandas - 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
解决方案
IIUC 让我们做transform
with 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'} )
推荐阅读
- swift - 如果另一个标签占用 X 行,我该如何隐藏一个标签?
- google-sheets - 谷歌表格动态复制/粘贴
- reactjs - 从 ReactJs 中的图像文件中读取条形码
- c# - 如何在dll文件中获取类名和方法名?
- sql - 根据服务年限显示员工职位
- typescript - 按值/引用分配变量
- javascript - 你能捕捉到函数参数抛出的异常吗?
- kubernetes - 如何在 Kubernetes 部署中增加或减少 pod 的数量
- c++ - “void”类型的值不能分配给 CPP 中“int”类型的实体
- intellij-idea - 即使我没有突出显示任何代码,IntelliJ 也会格式化整个文件