跨多个数据框计算新列

Calculate new column across multiple dataframes

我是 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,我想根据 [= 创建列 Weight_1 26=]体重 2 Component_type_X_df.

乘以 Master_df['Quantity_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 DataFrame 限制为只有两列, 并且一列用作合并键,合并只增加一个额外的 列,weightMaster_df

由于您不希望在 Master_df 中合并 weight 列,因此 上面的代码在 Master_df['weight'] 中执行计算,但随后重命名 该列 Weight_1.

Master_df['Weight_1'] = Master_df['Component_ID'].map(Component_type_1_df.set_index('Component_ID')['weight']) * Master_df['Quantity']

在没有数据集的情况下,我无法保证这会按预期工作,但地图功能应该可以帮助您到达您想去的地方。

如果您不想将计算的权重列附加到 master 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')

实际上我最近发布了一个类似的问题。我发布了一个数据集来搞乱这样你就可以学习这个功能。