计算跨多个数据帧的新列

问题描述 投票:1回答:2

我是熊猫新手,我希望从多个具有多个数据帧的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']。

python pandas dataframe view calculation
2个回答
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')

我实际上最近发布了一个与此类似的问题。我发布了一个数据集,因此你可以学习这个功能。

PANDAS vlookup against series with common index using map


1
投票

由于两个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

© www.soinside.com 2019 - 2024. All rights reserved.