我有两个DataFrame:
df = pd.DataFrame({'ID': ['bumgm001', 'lestj001',
'tanam001', 'hellj001', 'chacj001']})
df1 = pd.DataFrame({'playerID': ['bumgama01', 'lestejo01',
'tanakama01', 'hellije01', 'chacijh01'],
'retroID': ['bumgm001', 'lestj001', 'tanam001', 'hellj001', 'chacj001']})
OR
df df1
ID playerID retroID
'bumgm001' 'bumgama01' 'bumgm001'
'lestj001' 'lestejo01' 'lestj001'
'tanam001' 'tanakama01' 'tanam001'
'hellj001' 'hellije01' 'hellj001'
'chacj001' 'chacijh01' 'chacj001'
现在,我实际的DataFrame比这要复杂一些,但是我在这里简化了它,因此可以清楚地知道我要做什么。
我想提取ID
中的所有df
,并将它们替换为playerID
中的相应df1
。
我最后的df
应该看起来像这样:
df
**ID**
'bumgama01'
'lestejo01'
'tanakama01'
'hellije01'
'chacijh01'
我尝试使用以下方法进行操作:
for row in df.itertuples(): #row[1] == the retroID column
playerID = df1.loc[df1['retroID']==row[1], 'playerID']]
df.loc[df['ID']==row[1], 'ID'].replace(to_replace=
df.loc[df['ID']==row[1], 'ID'], value=playerID)
代码似乎可以正常运行。但是我在retroID
中的df
已更改为NaN
,而不是正确的playerIDs
。
这让我感到很困惑,因为它是数据类型问题,但是我对Pandas并不熟悉,无法进一步诊断。
编辑:
不幸的是,我使我的例子过于简单。我进行了编辑,以更好地代表我遇到的问题。我正在尝试在第二个DataFrame中的一个DataFrame中查找项目,然后将第二个Dataframe中相应的行中的项目替换第一个Dataframe中的项目。列的名称不同。
答案 0 :(得分:2)
您可以将第二个数据框用作替换字典:
to_replace = df1.set_index('retroID')['playerID'].to_dict()
df['retroID'].replace(to_replace, inplace=True)
答案 1 :(得分:1)
根据您的示例,这就是您想要的:
df['ID'] = df1['playerID']
如果数据顺序不正确(df中的行1与df1中的行1不同),请使用
df['ID']=df1.set_index('retroID').reindex(df['ID'])['playerID'].values
第二种方法的信用额度为温
输出
ID
0 bumgama01
1 lestejo01
2 tanakama01
3 hellije01
4 chacijh01
让我知道它是否正确
答案 2 :(得分:0)
好的,我找到了解决方案。事实证明,我的问题是类型问题。我从以下位置更新了代码:
for row in df.itertuples(): #row[1] == the retroID column
playerID = df1.loc[df1['retroID']==row[1], 'playerID']]
df.loc[df['ID']==row[1], 'ID'].replace(to_replace=
df.loc[df['ID']==row[1], 'ID'], value=playerID)
收件人:
for row in df.itertuples(): #row[1] == the retroID column
playerID = df1.loc[df1['retroID']==row[1], 'playerID']].values[0]
df.loc[df['ID']==row[1], 'ID'].replace(to_replace=
df.loc[df['ID']==row[1], 'ID'], value=playerID)
之所以可行,是因为“ playerID”现在是标量对象(由于.values [0]),而不是其他与DataFrame不兼容的其他数据类型。