有没有办法替换数据框中的列?

Is there a way to replace columns in dataframes?

*我根据收到的答案稍微编辑了问题!

这是我的第一个数据框。实际上,它有超过 30K 列 = df

cl_id gained_from_sup lost_to_sup fixed_term
1001 3 5 NaN
1002 1 1 NaN
1003 4 2 12
1004 1 3 6

这是我的第二个数据框,它有供应商 ID - 这与从 Sup 获得并丢失到 Sup 的数字匹配到相应的供应商名称 = df_supp

supplier_id supplier_name
1 KFC
2 Costa
3 Nandos
4 Starbucks
5 Burger King

在使用 pd.merge 合并它们之后,如何“左”,左上获得自……右上 supp Id..

输出第一个df_supp的df到最后。它确实与键正确匹配但是有没有办法用 df2 中的名称替换 df 中的 iDS 因为 table 在 2 列时没有意义(gained_from 和 lost_from in df1合并时的 supp_id 只匹配上获得的

这是我想要的输出:

cl_id gained_from_sup lost_to_sup fixed_term
1001 Nandos Burger King. NaN
1002 KFC KFC. NaN
1003 Starbucks Costa. 12
1004 KFC Nandos. 6

或者是否有更好的方法来重新格式化 table 以显示 gained_from_sup 和 lost_from_sup 的相应 ID 和名称?

DataFrame.replace

df1.replace(df2.set_index('supplier_id')['supplier_name'])

如果您只想在列的子集中执行替换:

cols = ['gained_from_sup', 'lost_to_sup']    
df1.assign(**df1[cols].replace(df2.set_index('supplier_id')['supplier_name']))

   cl_id gained_from_sup  lost_to_sup
0   1001          Nandos  Burger King
1   1002             KFC          KFC
2   1003       Starbucks        Costa
3   1004             KFC       Nandos

你可以在这里使用map,创建df_supp:

的字典
df["gained_from_sup"] = df["gained_from_sup"].map(df_supp.set_index("supplier_id")["supplier_name"].to_dict())
df["lost_to_sup"] = df["lost_to_sup"].map(df_supp.set_index("supplier_id")["supplier_name"].to_dict())
# setup
import pandas as pd
import numpy as np
df = pd.DataFrame({'cl_id' : [1001, 1002, 1003, 1004], 'gained_from_sup': [3, 1, 4, 1], 'lost_to_sup': [5, 1, 2, np.nan], 'fixed_term': [np.nan, np.nan, 12,6]})
df_supp = pd.DataFrame({'supplier_id': [1, 2, 3, 4, 5], 'supplier_name': ['KFC', 'Costa', 'Nandos', 'Starbucks', 'Burger King']})
# first merge
intermediate = df.merge(df_supp, left_on='gained_from_sup', right_on='supplier_id', how='left').drop(columns=['gained_from_sup', 'supplier_id'])
intermediate = intermediate.rename(columns= {'supplier_name': 'gained_from_sup'})
# second merge
final = intermediate.merge(df_supp, left_on='lost_to_sup', right_on='supplier_id', how='left').drop(columns=['lost_to_sup', 'supplier_id'])
final = final.rename(columns= {'supplier_name': 'lost_from_sup'})
# display result
final

将第二个数据帧转换为字典然后映射它的最佳方法。

cols = ['gained_from_sup', 'lost_to_sup']
lookup_name = df2.set_index('supplier_id')['supplier_name'].to_dict()
df1[cols] = df1[cols].replace(lookup_name)

不选择列的另一种方法

lookup_name = df2.set_index('supplier_id')['supplier_name'].to_dict()
df1 = df1.replace(lookup_name)