跨多个数据框计算新列

Posted

技术标签:

【中文标题】跨多个数据框计算新列【英文标题】:Calculate new column across multiple dataframes 【发布时间】:2017-09-30 15:51:01 【问题描述】:

我是 pandas 的新手,我希望从具有多个数据框的多个 excel 工作表中重做以下内容。

这是高级结构:

Master_df Master_UID |组件_ID_1 |数量_1 | ... |组件_ID_8 |数量_8

Component_type_1_df 组件_ID | ... |重量

Component_type_2_df 组件_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']。

【问题讨论】:

忘了说,Component_type_X_df 的结构不同。另外,我也在寻找一种方法来避免合并到 Master_df 但只包含新的计算。 【参考方案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

【讨论】:

嗨耶鲁!完美! 如果这是您运行的内容,请接受答案:) 嗨@yale-newman!完美运行!对于使用此解决方案的其他任何人,只需稍作修正,请使用 '...[weight]) * Master_df['Quantity_1']' 来匹配问题。再次感谢,我会检查你的链接,让我的 excel 大脑慢慢转换为 Pandas :)【参考方案2】:

由于两个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 数据帧限制为仅两列, 并且一列用作合并键,合并只增加一列 列,weightMaster_df

由于您不希望在 Master_df 中合并 weight 列,因此 上面的代码在Master_df['weight'] 中执行计算,然后重命名 那个专栏Weight_1

【讨论】:

您好,unutbu,感谢您的回答。抱歉,我没有澄清,但 Component_type_X_df 的结构不同。我也在寻找一种方法来避免合并到 Master_df 但只包含新的计算。

以上是关于跨多个数据框计算新列的主要内容,如果未能解决你的问题,请参考以下文章

计算并向R中的数据框添加新变量

将具有多个参数的函数应用于多列以创建新列[重复]

根据字典向数据框添加新列

PySpark / 计算出现次数并使用 UDF 创建新列

如何计算一列的累积和并创建一个新列?

如何使用 df 中的多个列来运行多个条件来计算新列? [复制]