跨多个数据框计算新列
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 限制为只有两列,
并且一列用作合并键,合并只增加一个额外的
列,weight
到 Master_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')
实际上我最近发布了一个类似的问题。我发布了一个数据集来搞乱这样你就可以学习这个功能。
我是 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 限制为只有两列,
并且一列用作合并键,合并只增加一个额外的
列,weight
到 Master_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')
实际上我最近发布了一个类似的问题。我发布了一个数据集来搞乱这样你就可以学习这个功能。