我有一个数据文件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']}此外,我有一个(在开头为空的) dataframe 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)发布于 2019-07-03 22:23:06
与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发布于 2019-07-03 22:11:33
考虑到算法的复杂性,我建议执行一个Series加法操作来解决这个问题。
为什么?在Pandas中,DataFrame中的每一列都充当遮罩下的Series。
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)运行此代码将映射数据集中包含的每个值,这些值将存储在我们的字典中。
发布于 2019-07-03 23:09:54
如果你想完全避开熊猫,只使用字典,这应该能解决它。
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} https://stackoverflow.com/questions/56878370
复制相似问题