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

Python 映射两个数据帧并使用字典执行求和操作,python,pandas,dataframe,dictionary,data-analysis,Python,Pandas,Dataframe,Dictionary,Data Analysis,我有一个数据帧df df Object Action Cost1 Cost2 0 123 renovate 10000 2000 1 456 do something 0 10 2 789 review 1000 50 和一本字典(称为字典) 此外,我有一个(开始时是空的)数据框df_new,它应该包含几乎与df相同的所有信息,除了列名需要不同(根据字典命名)以及df中的一些列应该基

我有一个数据帧df

df

   Object        Action  Cost1  Cost2
0     123      renovate  10000   2000
1     456  do something      0     10
2     789        review   1000     50
和一本字典(称为字典)

此外,我有一个(开始时是空的)数据框df_new,它应该包含几乎与df相同的所有信息,除了列名需要不同(根据字典命名)以及df中的一些列应该基于字典进行合并(例如求和操作)

import pandas as pd
import numpy as np

data_df = {'Object':  [123, 456, 789],
        'Action': ['renovate', 'do something', 'review'],
        'Cost1': [10000, 0, 1000],
        'Cost2': [2000, 10, 50],
        }

df = pd.DataFrame(data_df)
print(df) 
MyEmptydf = pd.DataFrame()
MyEmptydf['Object_new']=df['Object']
MyEmptydf['Action_new']=df['Action']
MyEmptydf['Total_Cost'] = df['Cost1'] + df['Cost2']

print(MyEmptydf) 
dictionary = MyEmptydf.to_dict(orient="index")
print(dictionary) 
结果应该如下所示:

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)

考虑到算法的复杂性,我建议执行
系列
加法操作来解决此问题

为什么??在
Pandas
中,
DataFrame
中的每一列都作为
系列
在引擎盖下工作

data_df_new = {
    'Object_new': df['Object'],
    'Action_new': df['Action'],
    'Total_Cost': (df['Cost1'] + df['Cost2'])  # Addition of two series
}

df_new = pd.DataFrame(data_df_new)

运行此代码将映射数据集中包含的每个值,这些值将存储在我们的字典中。

鉴于算法的复杂性,我建议执行
系列
加法操作来解决此问题

为什么??在
Pandas
中,
DataFrame
中的每一列都作为
系列
在引擎盖下工作

data_df_new = {
    'Object_new': df['Object'],
    'Action_new': df['Action'],
    'Total_Cost': (df['Cost1'] + df['Cost2'])  # Addition of two series
}

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

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

您可以使用空数据框复制新列,并使用
to_dict
将其转换为字典

import pandas as pd
import numpy as np

data_df = {'Object':  [123, 456, 789],
        'Action': ['renovate', 'do something', 'review'],
        'Cost1': [10000, 0, 1000],
        'Cost2': [2000, 10, 50],
        }

df = pd.DataFrame(data_df)
print(df) 
MyEmptydf = pd.DataFrame()
MyEmptydf['Object_new']=df['Object']
MyEmptydf['Action_new']=df['Action']
MyEmptydf['Total_Cost'] = df['Cost1'] + df['Cost2']

print(MyEmptydf) 
dictionary = MyEmptydf.to_dict(orient="index")
print(dictionary) 

您可以在此处运行代码:

您可以使用空数据框复制新列,并使用
将其转换为字典

import pandas as pd
import numpy as np

data_df = {'Object':  [123, 456, 789],
        'Action': ['renovate', 'do something', 'review'],
        'Cost1': [10000, 0, 1000],
        'Cost2': [2000, 10, 50],
        }

df = pd.DataFrame(data_df)
print(df) 
MyEmptydf = pd.DataFrame()
MyEmptydf['Object_new']=df['Object']
MyEmptydf['Action_new']=df['Action']
MyEmptydf['Total_Cost'] = df['Cost1'] + df['Cost2']

print(MyEmptydf) 
dictionary = MyEmptydf.to_dict(orient="index")
print(dictionary) 

您可以在这里运行代码:

如果您试图完全避免熊猫,并且只使用字典,这应该可以解决问题

Object = []
totalcost = []
action = []
for i in range(0,3):
    Object.append(data_df['Object'][i])
    totalcost.append(data_df['Cost1'][i]+data_df['Cost2'][i])
    action.append(data_df['Action'][i])
dict2  = {'Object':Object, 'Action':action, 'TotalCost':totalcost} 

如果你试图完全避免熊猫,只使用字典,这应该可以解决它

Object = []
totalcost = []
action = []
for i in range(0,3):
    Object.append(data_df['Object'][i])
    totalcost.append(data_df['Cost1'][i]+data_df['Cost2'][i])
    action.append(data_df['Action'][i])
dict2  = {'Object':Object, 'Action':action, 'TotalCost':totalcost}