首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检查多行分录是否有指标变量

如何检查多行分录是否有指标变量
EN

Stack Overflow用户
提问于 2021-09-03 00:33:35
回答 2查看 38关注 0票数 0

我想检查每个唯一的字母是否在其重复行条目中的某处有一个"1“,下面是DataFrame的一个示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  Letter  Indicator
0      A       0
1      A       1
2      A       0
3      B       0
4      B       0
5      C       0
6      C       0
7      C       1
8      C       0

所以我想返回其中条目没有1的字母。在本例中,字母B

如有任何反馈,不胜感激。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-03 00:36:15

如果性能很重要,请在原始值和过滤值中的唯一值之间使用numpy.setdiff1d

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
out = np.setdiff1d(df['Letter'].unique(), df.loc[df['Indicator'].eq(1), 'Letter'].unique())

或使用~的反转掩码通过Series.isin测试成员资格

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
out = df.loc[~df['Letter'].isin(df.loc[df['Indicator'].eq(1), 'Letter']), 'Letter'].unique()

或者使用GroupBy.all,但将eq(1)更改为ne(1)eq(0)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m = df['Indicator'].ne(1).groupby(df['Letter']).all()
#alternative
#m = df['Indicator'].eq(0).groupby(df['Letter']).all()
out = m.index[m]

对于列表使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
out = out.tolist()
票数 2
EN

Stack Overflow用户

发布于 2021-09-03 00:39:05

您可以groupby letter并检查是否存在1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(df.groupby('Letter')
   .filter(lambda g: 1 not in g['Indicator'].values)
   ['Letter'].unique()
   .tolist()
)

或者这个替代方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s = df['Indicator'].eq(1).groupby(df['Letter']).any()
list(s[~s].index)

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['B']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69041852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文