Yas*_*ade 6 python dataframe python-3.x pandas
如何根据另一列的值打印/返回值?
analyse = input[['SR. NO', 'COUNTRY_NAME']]
print(analyse)
SR. NO COUNTRY_NAME
2 Norway
2 Denmark
2 Iceland
2 Finland
3 Denmark
3 Iceland
4 Finland
4 Norway
Run Code Online (Sandbox Code Playgroud)
在这里,我想检查一下挪威或 丹麦 是否出现在每个SR 中。否,请返回未找到这两个国家/地区之一的序列号!我尝试使用 groupby 并迭代国家/地区,但这没有帮助。我被困在这一点上。
因此,预期输出是:
[3,4]
Run Code Online (Sandbox Code Playgroud)
您可以用于set.issubset测试每个组是否存在列表的所有值:
L = ['Norway', 'Denmark']
s = set(L)
out = df.groupby('SR. NO')['COUNTRY_NAME'].apply(lambda x: s.issubset(x))
Run Code Online (Sandbox Code Playgroud)
感谢@yatu 和@taras 的改进:
s = frozenset(L)
out = df.groupby('SR. NO')['COUNTRY_NAME'].apply(s.issubset)
Run Code Online (Sandbox Code Playgroud)
然后仅过滤 s 值的索引True:
out = out.index[~out].tolist()
print (out)
[3, 4]
Run Code Online (Sandbox Code Playgroud)
列表理解中使用过滤器的另一个解决方案:
L = ['Norway', 'Denmark']
s = set(L)
out = [k for k, v in df.groupby('SR. NO')['COUNTRY_NAME'].apply(set).items()
if not s.issubset(v)]
print (out)
[3, 4]
Run Code Online (Sandbox Code Playgroud)