首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫组删除出现特定值组合的行

熊猫组删除出现特定值组合的行
EN

Stack Overflow用户
提问于 2020-08-27 16:22:29
回答 2查看 224关注 0票数 1

如前所述,我想根据逻辑组删除特定的行。在下面的数据中,无论F和G的组合发生在哪个ID中,我都希望删除值G的行。

代码语言:javascript
运行
复制
import pandas as pd
op_d = {'ID': [1,1,2,2,3,4],'Value':['F','G','K','G','H','G']}
df = pd.DataFrame(data=op_d)
df

在这种情况下,我想删除ID = 1的值为'G‘的第二行。

代码语言:javascript
运行
复制
temp = df.groupby('ID').apply(lambda x: (x['Value'].nunique()>1)).reset_index().rename(columns={0:'Expected_Output'})
temp = temp.loc[temp['Expected_Output']==True]
multiple_options = df.loc[df['ID'].isin(temp['ID'])]

到目前为止,我能够确定每个ID具有多个值的位置。您能告诉我如何删除这一行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-27 16:33:53

Series.eq + Series.groupby变换与any

代码语言:javascript
运行
复制
m1, m2 = df['Value'].eq('F'), df['Value'].eq('G')
m = m2 & m1.groupby(df['ID']).transform('any') & m2.groupby(df['ID']).transform('any')
df1 = df[~m]

结果:

代码语言:javascript
运行
复制
print(df1)
   ID Value
0   1     F
2   2     K
3   2     G
4   3     H
5   4     G
票数 3
EN

Stack Overflow用户

发布于 2020-08-27 16:36:31

使用isin

代码语言:javascript
运行
复制
c = (df['Value'].isin(['F','G']).groupby(df['ID']).transform('sum').eq(2) 
     & df['Value'].eq('G'))
out = df[~c].copy()

代码语言:javascript
运行
复制
   ID Value
0   1     F
2   1     H
3   2     K
4   2     G
5   3     H
6   4     G
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63620270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档