我试图获取数据框中的所有行,其中列值不在列表中(因此通过排除进行过滤).
举个例子:
df = sqlContext.createDataFrame([('1','a'),('2','b'),('3','b'),('4','c'),('5','d')]
,schema=('id','bar'))
Run Code Online (Sandbox Code Playgroud)
我得到了数据框:
+---+---+
| id|bar|
+---+---+
| 1| a|
| 2| b|
| 3| b|
| 4| c|
| 5| d|
+---+---+
Run Code Online (Sandbox Code Playgroud)
我只想排除bar所在的行('a'或'b').
使用SQL表达式字符串,它将是:
df.filter('bar not in ("a","b")').show()
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用SQL表达式的字符串或一次排除一个项目的情况下执行此操作?
编辑:
我可能有一个列表,['a','b'],我想要使用的排除值.
在Pandas DataFrame中,我可以使用DataFrame.isin()函数将列值与另一列匹配.
例如:假设我们有一个DataFrame:
df_A = pd.DataFrame({'col1': ['A', 'B', 'C', 'B', 'C', 'D'],
'col2': [1, 2, 3, 4, 5, 6]})
df_A
col1 col2
0 A 1
1 B 2
2 C 3
3 B 4
4 C 5
5 D 6
Run Code Online (Sandbox Code Playgroud)
和另一个DataFrame:
df_B = pd.DataFrame({'col1': ['C', 'E', 'D', 'C', 'F', 'G', 'H'],
'col2': [10, 20, 30, 40, 50, 60, 70]})
df_B
col1 col2
0 C 10
1 E 20
2 D 30
3 C 40
4 F 50
5 …Run Code Online (Sandbox Code Playgroud)