[英]How to join two tables with the same values but with different column names in pandas
[英]SQL join for two tables, with same column names on Python
已經有幾個問題有同樣的問題,我看了都一樣,但仍然沒有找到解決方案。 我想從兩個表(具有相同名稱(device_id)的列)合並並計數。
列名:事件和gender_age_train
import pandas as pd
from sqlalchemy import create_engine # database connection
db_engine = create_engine('sqlite:///devices-train.db')
join_devices = pd.read_sql_query('SELECT device_id, count(device_id), gender_age_train.device_id, count(gender_age_train.device_id) FROM events JOIN gender_age_train on events.device_id = gender_age_train.device_id GROUP BY device_id', db_engine)
print join_devices
python的輸出是:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) ambiguous column name: device_id [SQL: 'SELECT device_id, count(device_id), gender_age_train.device_id, count(gender_age_train.device_id) FROM events JOIN gender_age_train on events.device_id = gender_age_train.device_id GROUP BY device_id']
如前所述,您需要完全限定device_id
列,因為它出現在兩個表中。 值得注意的是,選擇events.device_id
和gender_age_train.device_id
相等(根據join
條件)是一點點的。 選擇其中之一就足夠了:
SELECT e.device_id, COUNT(*)
FROM events e
JOIN gender_age_train g on e.device_id = g.device_id
GROUP BY e.device_id
當用於聯接的列具有相同的名稱時,可以使用USING子句 。 這不僅可以節省鍵入內容,還可以從聯接輸出中刪除重復的列,以便您可以更輕松地引用它:
SELECT device_id, COUNT(*)
FROM events
JOIN gender_age_train USING (device_id)
GROUP BY device_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.