我想检查每个唯一的字母是否在其重复行条目中的某处有一个"1“,下面是DataFrame的一个示例
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
如有任何反馈,不胜感激。
谢谢!
发布于 2021-09-03 00:36:15
如果性能很重要,请在原始值和过滤值中的唯一值之间使用numpy.setdiff1d
:
out = np.setdiff1d(df['Letter'].unique(), df.loc[df['Indicator'].eq(1), 'Letter'].unique())
或使用~
的反转掩码通过Series.isin
测试成员资格
out = df.loc[~df['Letter'].isin(df.loc[df['Indicator'].eq(1), 'Letter']), 'Letter'].unique()
或者使用GroupBy.all
,但将eq(1)
更改为ne(1)
或eq(0)
m = df['Indicator'].ne(1).groupby(df['Letter']).all()
#alternative
#m = df['Indicator'].eq(0).groupby(df['Letter']).all()
out = m.index[m]
对于列表使用:
out = out.tolist()
发布于 2021-09-03 00:39:05
您可以groupby
letter并检查是否存在1:
(df.groupby('Letter')
.filter(lambda g: 1 not in g['Indicator'].values)
['Letter'].unique()
.tolist()
)
或者这个替代方案:
s = df['Indicator'].eq(1).groupby(df['Letter']).any()
list(s[~s].index)
输出:
['B']
https://stackoverflow.com/questions/69041852
复制相似问题