所以我有 2 个数据帧,一个是我有玩家统计数据和他的 ID,第二个是我有 ID 和玩家真实姓名。我想将第一个数据框中的列从玩家 ID 更改为在第二个数据框中传递的玩家真实姓名。
data_1 = {'ID_first_player':['1', '2', '3', '4'],
'ID_second_player':['1', '4', '3', '8'],
'Points':[20, 21, 19, 18]}
data_2 = {'ID':['1', '2', '3', '4', '5', '6', '7', '8],
'RealName':['Tom', 'mark', 'nick', 'dan', 'krish', 'jack', 'maxim', 'ken']}
df_1 = pd.DataFrame(data_1)
df_2 = pd.DataFrame(data_2)
result_data = {'Name_first_player':['Tom', 'mark', 'nick', 'dan'],
'Name_second_player':['Tom', 'dan', 'nick', 'ken'],
'Points':[20, 21, 19, 18]}
df_result = pd.DataFrame(result_data)
我就这样累了但没用
df_1['ID_first_player'] = df_2[df_2['ID'] == df_1['ID_first_player']].iloc[:,1]
有人可以帮忙吗?
答案 0 :(得分:1)
您可以使用.map
:
m = df_2.set_index("ID")["RealName"]
df_1.ID_first_player = df_1.ID_first_player.map(m)
df_1.ID_second_player = df_1.ID_second_player.map(m)
print(df_1)
打印:
ID_first_player ID_second_player Points
0 Tom Tom 20
1 mark dan 21
2 nick nick 19
3 dan ken 18
答案 1 :(得分:1)
您可以从 df_2 值创建字典,然后替换 df_1 中的值:
d = pd.Series(df_2['RealName'].values, index=df_2['ID']).to_dict()
df_result = df_1.replace(d)
df_result.columns = ['Name_first_player', 'Name_second_player', 'Points']
输出:
Name_first_player Name_second_player Points
0 Tom Tom 20
1 mark dan 21
2 nick nick 19
3 dan ken 18
答案 2 :(得分:1)
您可以使用 join
,这将是您想要执行的操作的 SQL 方法。
df_realnames = df_1.join(df_2.set_index('ID'), on=['ID_first_player','ID_first_player'], lsuffix='_first_player', rsuffix='_second_player')
那么df_realnames的列就是“RealName_first_player”和“RealName_second_player”,这其实是更准确的描述。