我是熊猫新手,我希望从多个具有多个数据帧的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_1列。
乘以Master_df ['Quantity_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')
我实际上最近发布了一个与此类似的问题。我发布了一个数据集,因此你可以学习这个功能。
由于两个Component_type_*_df
DataFrames没有相同的结构,只连接您需要的这些DataFrames的部分,然后将结果与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
DataFrames限制为仅两列,并且一列用作合并键,因此合并仅将另一列weight
添加到Master_df
。
由于您不希望在weight
中包含合并的Master_df
列,因此上面的代码在Master_df['weight']
中执行计算,但随后重命名该列Weight_1
。