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

基于另一列连续值拼接Pandas DataFrame列字符串的实现方法

给FD关联对应的MS值生成结果列的解决方案

嘿,我来帮你搞定这个Pandas需求!你需要把每个FD对应的所有MS的col2值整理到结果列里,对吧?下面是两种实用的实现方法,一步步来:

方法一:分步分组聚合(清晰易懂)

1. 给每个FD-MS组打上唯一标识

首先,我们可以通过判断col1是否为FD,然后累加这个布尔值,给每个FD和它后续的MS分配同一个分组ID:

import pandas as pd

dict_obj = {'col1': ['FD', 'MS', 'MS', 'FD', 'MS', 'MS', 'MS', 'FD', 'MS', 'MS'], 'col2': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']}
df = pd.DataFrame(dict_obj)

# 每遇到一个FD,分组ID就加1,这样同组的FD和MS会有相同的ID
df['group_id'] = (df['col1'] == 'FD').cumsum()

2. 收集每组内的MS值

接下来,我们按分组ID聚合,把每组里所有MS的col2值收集成列表:

# 只筛选MS行,按group_id分组后把col2转成列表
ms_groups = df[df['col1'] == 'MS'].groupby('group_id')['col2'].agg(list).reset_index(name='result')

3. 把结果合并回原DataFrame

最后把聚合好的结果合并回去,这样每个FD和对应的MS行都能关联到该组的MS列表:

df = df.merge(ms_groups, on='group_id', how='left')

# 如果只希望FD行显示结果,MS行留空的话,加上这一行
df.loc[df['col1'] == 'MS', 'result'] = None

运行完之后,你的DataFrame会变成这样:

col1col2group_idresult
0FDA1['B', 'C']
1MSB1NaN
2MSC1NaN
3FDD2['E', 'F', 'G']
4MSE2NaN
5MSF2NaN
6MSG2NaN
7FDH3['I', 'J']
8MSI3NaN
9MSJ3NaN

方法二:用transform一步搞定(更简洁)

如果想要更紧凑的代码,可以用transform方法直接在原DataFrame上生成结果列:

import pandas as pd

dict_obj = {'col1': ['FD', 'MS', 'MS', 'FD', 'MS', 'MS', 'MS', 'FD', 'MS', 'MS'], 'col2': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']}
df = pd.DataFrame(dict_obj)

# 分组后提取每组内MS的col2值作为结果
df['result'] = df.groupby((df['col1'] == 'FD').cumsum())['col2'].transform(
    lambda x: x[x.index.isin(df[df['col1'] == 'MS'].index)].tolist()
)

# 同样可以选择清空MS行的结果
df.loc[df['col1'] == 'MS', 'result'] = None

这个方法的核心思路和第一种一样:用cumsum生成分组键,把每个FD和后续MS归为一组,然后提取组内的MS值作为结果列内容。

内容的提问来源于stack exchange,提问作者Praneeth Krishna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:06:15