shift
не играет никакой роли в вашем коде. Это
import pandas as pd
df = pd.DataFrame({
"name_x" : ["ABC", "CDF", "DEW", "ABC"],
"age_x": [20, 20, 22, 21],
"name_y" : ["ABC", "CDF", "DEW", "ABC"],
"age_y" : [20, 21, 22, 19],
})
mask1 = (df['name_x'].shift(0) == df['name_y'].shift(0)) & \
(df['age_x'].shift(0) == df['age_y'].shift(0))
df[~mask1]
# name_x age_x name_y age_y
# 1 CDF 20 CDF 21
# 3 ABC 21 ABC 19
эквивалентно
mask2 = (df['name_x'] == df['name_y']) & (df['age_x'] == df['age_y'])
df[~mask2]
# name_x age_x name_y age_y
# 1 CDF 20 CDF 21
# 3 ABC 21 ABC 19
Поэтому все, что вам нужно, это фильтр:
sdf = spark.createDataFrame(df)
smask = ~((sdf["name_x"] == sdf["name_y"]) & (sdf["age_x"] == sdf["age_y"]))
sdf.filter(smask).show()
# +------+-----+------+-----+
# |name_x|age_x|name_y|age_y|
# +------+-----+------+-----+
# | CDF| 20| CDF| 21|
# | ABC| 21| ABC| 19|
# +------+-----+------+-----+
, который по законам де Моргана может быть упрощен до
(sdf["name_x"] != sdf["name_y"]) | (sdf["age_x"] != sdf["age_y"])
Как правило, shift
можно выразить с помощью Оконные функции .