Skip to main content
 首页 » 编程设计

python之映射两个数据帧并使用字典执行求和操作

2025年05月04日21daizhj

我有一个数据框df

df 
 
   Object        Action  Cost1  Cost2 
0     123      renovate  10000   2000 
1     456  do something      0     10 
2     789        review   1000     50 

和一个字典(称为字典)

dictionary 
 
{'Object_new': ['Object'], 
 'Action_new': ['Action'], 
 'Total_Cost': ['Cost1', 'Cost2']} 

此外,我有一个(开头为空)数据框df_new,它应该包含与 df 几乎相同的信息,除了列名需要不同(根据字典命名)和df 中的某些列应该基于字典进行合并(例如求和运算)。

结果应该是这样的:

df_new 
 
   Object_new    Action_new  Total_Cost 
0         123      renovate       12000 
1         456  do something          10 
2         789        review        1050 

我怎样才能只使用字典来达到这个结果?我尝试使用 .map() 函数,但不知道如何用它执行求和运算。

附上复制数据框和字典的代码:

# import libraries 
import pandas as pd 
 
 
### create df 
data_df = {'Object':  [123, 456, 789], 
        'Action': ['renovate', 'do something', 'review'], 
        'Cost1': [10000, 0, 1000], 
        'Cost2': [2000, 10, 50], 
        } 
 
df = pd.DataFrame(data_df) 
 
 
### create dictionary 
dictionary = {'Object_new':['Object'],  
              'Action_new':['Action'],  
              'Total_Cost' : ['Cost1', 'Cost2']} 
 
 
### create df_new 
# data_df_new = pd.DataFrame(columns=['Object_new', 'Action_new', 'Total_Cost' ]) 
data_df_new = {'Object_new':  [123, 456, 789], 
        'Action_new': ['renovate', 'do something', 'review'], 
        'Total_Cost': [12000, 10, 1050], 
        } 
df_new = pd.DataFrame(data_df_new) 

请您参考如下方法:

使用 groupby 的游戏:

inv_dict = {x:k for k,v in dictionary.items() for x in v} 
df_new =  df.groupby(df.columns.map(inv_dict), 
                     axis=1).sum() 

输出:

     Action_new  Object_new  Total_Cost 
0      renovate         123       12000 
1  do something         456          10 
2        review         789        1050