#python #pandas #dataframe #dataset
#питон #панды #dataframe #набор данных
Вопрос:
Я хочу объединить два набора данных, но я не знаю, как это сделать. Первый набор данных имеет следующий формат.
Year Team Wins Loses
----------------------------
2020 MLK 14 4
2020 BRKL 10 5
2020 PHX 5 10
2019 BRKL 11 4
2019 MLK 10 5
2019 PHX 8 7
2018 ... ... ...
Второй набор данных имеет следующий формат:
Year Team1 Points1 Team2 Points2
---------------------------------------
2020 MLK 80 PHX 66
2020 PHX 71 BRKL 70
2020 BRKL 90 MLK 80
2019 PHX 69 BRKL 70
2019 ... ... ... ...
Конечный набор данных, который я хочу иметь, имеет следующий формат:
Year Team1 Points1 Team2 Points2 Team1Wins Team1Loses Team2Wins Team2Loses
2020 MLK 80 PHX 66 14 4 5 10
2020 PHX 71 BRKL 70 5 10 10 5
2020 BRKL 90 MLK 80 10 5 14 4
2019 PHX 69 BRKL 70 8 7 11 4
2019 ... ... ... ... ... ... ... ...
Я прочитал вопросы здесь, но у меня нет решения для моей проблемы. Я пробовал что-то подобное выше, но это неправильное решение.
import pandas as pd
a = pd.read_csv("Score.csv",error_bad_lines=False)
b = pd.read_csv("Team.csv",error_bad_lines=False)
merged = pd.merge(a, b, how='left', on=['Year'])
print(merged)
Есть ли способ достичь этого?
Комментарии:
1. если вы ссылаетесь на мой код, я не знаю. Вот почему я задаю этот вопрос 🙂
Ответ №1:
Использовать DataFrame.merge
со rename
столбцами:
d = {'WIN%':'Team1Wins','FG%':'Team1Loses','Team':'Team1'}
df = b.merge(a.rename(columns = d)[['Team1Wins','Team1Loses','Team1','Year']],
on=['Year', 'Team1'])
d = {'WIN%':'Team2Wins','FG%':'Team2Loses','Team':'Team2'}
df = df.merge(a.rename(columns = d)[['Team2Wins','Team2Loses','Team2','Year']],
on=['Year', 'Team2'])
print (df)
Year Team1 Points1 Team2 Points2 Team1Wins Team1Loses Team2Wins
0 2020 MLK 80 PHX 66 14 4 5
1 2020 PHX 71 BRKL 70 5 10 10
2 2020 BRKL 90 MLK 80 10 5 14
3 2019 PHX 69 BRKL 70 8 7 11
Team2Loses
0 10
1 5
2 4
3 4
Комментарии:
1. Спасибо за ваше время, у меня есть ошибка трассировки (последний последний вызов) в этой строке df = b.merge(a.rename(columns = d), on=[‘Year’, ‘Team1’])
2. @The_elevator — Можете ли вы опубликовать последнюю строку ошибки?
3. Это последняя строка ошибки: File «C:Python38libsite-packagespandascoregeneric.py «, строка 1684, в _get_label_or_level_values вызывает KeyError(ключ) KeyError: ‘Team1’
4. @The_elevator — Так это значит , что нет имени столбца
Team1
, что такоеprint (df1.columns.tolist())
иprint (df2.columns.tolist())
?5. я запускаю следующие команды, подобные этой print (a.columns. tolist()) и это выведет у меня на экране следующее: [‘Year’, ‘Team1’, ‘Points1’, ‘Team2’, ‘Points2’]