基于其他数据帧更改列中的值

2024-05-13 00:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有两个数据帧,一个是当我有球员统计数据和他的id时,另一个是当我有id和球员真实姓名时。我想将第一个数据帧中的列从玩家id更改为第二个数据帧中的玩家实名pased

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]

有人能帮忙吗


Tags: 数据iddataframedfdata玩家resultnick
3条回答

您可以使用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”,这实际上是更准确的描述

您可以使用.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

您可以从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

相关问题 更多 >