输入数据a:
obj number
1 111
2 222
3 333
4 555
输入数据b:
obj number
1 111
2 222
3 333
4 444
输入数据c:
obj number
1 777
2 222
3 333
4 888
预期的输出数据:
false
true
false
尝试:
~set([111,444]).issubset(set(df_tmp['wahlnummer']))
not set([111,444]).issubset(set(df_tmp['wahlnummer']))
([111,444] not in df_tmp['wahlnummer'])
实际输出a:
-2
-1
-1
实际输出b:
false
true
true
实际输出c:
unhashable type: 'list'
但是大多数尝试会找到模式,其中2个值之一不在dataframe列中,但如果两个都不在,则不存在。应该以某种方式为or运算符提供某种方式。
仅在数据框的任何行中都没有值时返回true
如果我在df中不使用111或433,那么即使它们全部为1或都不为空,它只是认为它们都没有值。
edit2: mvce:
df_a = pd.DataFrame({'number': [111, 222, 333, 555]})
df_b = pd.DataFrame({'number': [111, 222, 333, 444]})
df_c = pd.DataFrame({'number': [777, 222, 333, 888]})
print (df_a)
print (df_b)
print (df_c)
print(not(set([111,444]).issubset(set(df_a['number']))))
print(not(set([111,444]).issubset(set(df_b['number']))))
print(not(set([111,444]).issubset(set(df_c['number']))))
结果:
True
False
True
答案 0 :(得分:0)
df = pd.read_fwf(StringIO("""obj number
1 433
2 342
3 111
4 345"""))
values1 = [111, 433]
values2 = [111, 433, 222]
print(all([any(df['number'] == v) for v in values1]))
print(all([any(df['number'] == v) for v in values2])
输出:
True
False
答案 1 :(得分:0)
如果集合没有与其他集合相同的元素,则返回True。当且仅当它们的交集为空集时,集才是不相交的。
print ((set([111,444]).isdisjoint(set(a['number']))))
False
print ((set([111,444]).isdisjoint(set(b['number']))))
False
print ((set([111,444]).isdisjoint(set(c['number']))))
True
答案 2 :(得分:0)
由于您要对三(3)个不同数据框的每一行进行比较,因此您只需将相关的列添加到一个并在其中进行比较,就可以使用np.where()
为结果创建一个新列。
>>> df1 = pd.DataFrame({'obj':[1,2,3,4], 'number':[111,222,333,555]})
>>> df2 = pd.DataFrame({'obj':[1,2,3,4], 'number':[111,222,333,444]})
>>> df3 = pd.DataFrame({'obj':[1,2,3,4], 'number':[777,222,333,888]})
>>> df1
obj number
0 1 111
1 2 222
2 3 333
3 4 555
>>> df2
obj number
0 1 111
1 2 222
2 3 333
3 4 444
>>> df3
obj number
0 1 777
1 2 222
2 3 333
3 4 888
创建列:
>>> df1['num from df2'] = df2['number']
>>> df1['num from df3'] = df3['number']
>>> df1
obj number num from df2 num from df3
0 1 111 111 777
1 2 222 222 222
2 3 333 333 333
3 4 555 444 888
现在使用np.where()
进行比较,我相信您所需要的对于返回True
都是正确的,因此我们将使用&
:
>>> df1['Conditon Result'] = np.where((df1['number'] == df1['num from df2']) & (df1['number'] == df1['num from df3']), [True], [False])
>>> df1
obj number num from df2 num from df3 Conditon Result
0 1 111 111 777 False
1 2 222 222 222 True
2 3 333 333 333 True
3 4 555 444 888 False
让我知道这是否有帮助:))。