首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射两个数据文件并使用字典执行和操作

映射两个数据文件并使用字典执行和操作
EN

Stack Overflow用户
提问于 2019-07-03 21:53:10
回答 3查看 285关注 0票数 1

我有一个数据文件df

代码语言:javascript
复制
df

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

和一个字典(称为字典)

代码语言:javascript
复制
dictionary

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

此外,我有一个(在开头为空的) dataframe df_new,它应该包含几乎所有相同的信息为df,但列名需要不同(根据字典命名),来自df的某些列应该根据字典合并(例如和操作)。

结果应该如下所示:

代码语言:javascript
复制
df_new

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

我怎样才能只用字典来达到这个结果呢?我试着使用.map()函数,但是找不出如何使用它执行和操作。

复制数据文件和字典的代码附在后面:

代码语言:javascript
复制
# 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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-03 22:23:06

groupby合作的戏剧

代码语言:javascript
复制
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()

输出:

代码语言:javascript
复制
     Action_new  Object_new  Total_Cost
0      renovate         123       12000
1  do something         456          10
2        review         789        1050
票数 2
EN

Stack Overflow用户

发布于 2019-07-03 22:11:33

考虑到算法的复杂性,我建议执行一个Series加法操作来解决这个问题。

为什么?在Pandas中,DataFrame中的每一列都充当遮罩下的Series

代码语言:javascript
复制
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)

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

票数 1
EN

Stack Overflow用户

发布于 2019-07-03 23:09:54

如果你想完全避开熊猫,只使用字典,这应该能解决它。

代码语言:javascript
复制
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} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56878370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档