我是pandas的新手,我希望从包含多个数据帧的多个Excel工作表中重做以下内容。
这是高级结构:
Master_df
Master_UID | Component_ID_1 | Quantity_1 | ...... | Component_ID_8 | Quantity_8
Component_type_1_df
Component_ID | ...... |重量
Component_type_2_df
Component_ID | ...... |重量
Master_UID ['Component_ID_1']包含Component_type_1_df和Component_type_2_df
中的'Component_ID'现在在 Master_df 中,我想根据2个Component_type_X_df中的 weight 创建列 Weight_1 列。
乘以Master_df ['Quantity_1']。
答案 0 :(得分:1)
由于两个Component_type_*_df
DataFrames 没有具有相同的结构,因此只连接您需要的这些DataFrame的部分,
然后将结果与Master_df
合并。
cols = ['Component_ID', 'weight']
Components_df = pd.concat([Component_type_1_df[cols], Component_type_2_df[cols]], axis=0)
Master_df = pd.merge(Master_df, Components_df,
left_on='Component_ID_1',
right_on='Component_ID', how='left')
Master_df['weight'] = Master_df['weight'] * Master_df['Quantity_1']
Master_df = Master_df.rename({'weight':'Weight_1'})
由于我们已将Component_type_*_df
DataFrame限制为仅两列,
并且一列用作合并键,合并仅添加一个
列,weight
到Master_df
。
由于您不希望在weight
中包含合并的Master_df
列,因此
上面的代码执行Master_df['weight']
中的计算,但随后重命名
该列Weight_1
。
答案 1 :(得分:1)
Master_df['Weight_1'] = Master_df['Component_ID'].map(Component_type_1_df.set_index('Component_ID')['weight']) * Master_df['Quantity']
如果没有可以使用的数据集,我无法保证这将按预期工作,但地图功能应该可以帮助您到达您想去的地方。
如果您不想将计算出的重量列附加到主df的末尾,则可以执行以下操作:
Master_df.insert({desired_index_position},'Weight_1', Master_df['Component_ID'].map(Component_type_1_df.set_index('Component_ID')['weight']) * Master_df['Quantity')
我实际上最近发布了一个与此类似的问题。我发布了一个数据集,因此你可以学习这个功能。