.alias('b')
не создает идентификатор Python с именем b
. Устанавливает внутреннее имя возвращаемого фрейма данных. Ваш a.id
скорее всего не , то, что вы ожидаете, тоже будет, но это что-то определенное ранее.
Я не могу вспомнить хороший способ получить доступ к вновь созданному DF по имени прямо в выражении. Я бы пошел с промежуточным идентификатором:
df_joined = df1.join(df1.id == df2.id, how='inner')
result_df = dj_joined.join(df_joined.id == df3.id, how='inner')