Как сравнить две даты из двух DF без совпадения индекса? - PullRequest
0 голосов
/ 24 января 2019
df1
  USERID    DATE
     1       1/1/2018
     1       1/2/2018
     1       1/3/2018
     2       1/2/2018
     2       1/3/2018
     3       1/3/2018

df2
  USERID    DATE
     1       1/1/2018        
     2       1/2/2018         
     3       1/3/2018

Я хочу сравнить date с df2 до df1, принадлежащим тому же USERID, чтобы определить, существует ли строка в df1 также в df2

Result:
  USERID      DATE       Exists
     1       1/1/2018     True
     1       1/2/2018     False
     1       1/3/2018     False
     2       1/2/2018     True
     2       1/3/2018     False
     3       1/3/2018     True

Я хочу сделать эквивалент np.where((df1['DATE'] == df2['DATE']), True, False) но ошибка возвращается прямо сейчас Can only compare identically-labeled Series objects

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Похоже, вы пытаетесь выполнить левое соединение и затем отобразить новый столбец, где df2 равно нулю.

Ниже приведен пример, адаптированный из этого SO ответа , а также этого поста :

from pyspark.sql import functions as F

# Alias the columns here, to prevent column name collision
df1_alias = df1.alias("first")
df2_alias = df2.alias("second")

# Left join on df1.id = df2.id and df1.date = df2.date
result = df1_alias.join(df2_alias, (df1_alias.id == df2_alias.id) & (df1_alias.date == df2_alias.date), how='left')

# Create a column called 'exists' and set it to true if there's a value defined for df2
result = result.withColumn('exists', F.col("second.id").isNotNull())

# Display just df1 values and the exists column
result.select([F.col("first.id"), F.col("first.name"), F.col("exists")]).show()
0 голосов
/ 24 января 2019

Вы можете сделать merge:

# create a new column 
df2['Exists'] = True

df3 = pd.merge(df1,df2,on=['USERID','DATE'],how='outer').fillna(False)

  USERID    DATE    Exists
0   1   1/1/2018    True
1   1   1/2/2018    False
2   1   1/3/2018    False
3   2   1/2/2018    True
4   2   1/3/2018    False
5   3   1/3/2018    True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...