You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比DataFrame中的值并将条件应用到新DataFrame?——合并相同MOL对应SIN字段的需求实现

按MOL分组合并SIN并生成指定结构DataFrame的解决方案

没问题,我来帮你搞定这个DataFrame的处理需求!我们可以通过分组聚合+构造新表的两步法来实现你的要求,下面是具体的步骤和代码:

步骤1:按MOL分组并合并对应SIN值

首先,我们需要把原DataFrame中相同MOL值的SIN用逗号连接起来。这里可以用pandas的groupby配合agg方法来完成分组聚合:

import pandas as pd

# 构造原DataFrame
data = {
    'SIN': [339940, 322291, 321234],
    'MOL': [250000, 250000, 850000]
}
df = pd.DataFrame(data)

# 按MOL分组,将每组的SIN用逗号连接
grouped = df.groupby('MOL')['SIN'].agg(','.join).reset_index()

这一步执行后,grouped会得到一个包含两列的中间DataFrame:

MOLSIN
250000339940,322291
850000321234

步骤2:构造目标结构的新DataFrame

接下来,我们需要把分组后的结果转换成你需要的SIN1、SIN2、MOL1、MOL2结构。由于示例中只有两个不同的MOL组,我们可以直接提取分组结果并构造新表:

# 提取分组后的结果列表
group_list = grouped.values.tolist()

# 构造目标DataFrame df1
df1 = pd.DataFrame({
    'SIN1': [group_list[0][1]],
    'SIN2': [group_list[1][1]],
    'MOL1': [group_list[0][0]],
    'MOL2': [group_list[1][0]]
})

执行后df1的结果就和你给出的示例完全一致了:

SIN1SIN2MOL1MOL2
339940,322291321234250000850000

扩展:如果有多个不同MOL值的情况

如果你的原DataFrame中有更多不同的MOL组,想要把每个组的合并结果依次作为列(比如SIN1、SIN2、SIN3...),可以用pandas的转置或透视功能来生成宽表:

# 给分组后的结果添加序号列
grouped['sin_col'] = ['SIN' + str(i+1) for i in range(len(grouped))]
grouped['mol_col'] = ['MOL' + str(i+1) for i in range(len(grouped))]

# 分别生成SIN和MOL的宽表
sin_wide = grouped.pivot(columns='sin_col', values='SIN').reset_index(drop=True)
mol_wide = grouped.pivot(columns='mol_col', values='MOL').reset_index(drop=True)

# 合并成最终表
df1_extended = pd.concat([sin_wide, mol_wide], axis=1)

这样不管有多少个MOL组,都能自动生成对应的SIN和MOL列啦!

内容的提问来源于stack exchange,提问作者Rikky Bhai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 07:02:35