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

如何根据Pandas DataFrame中另一列的值生成分组列表?

按句子分组生成元组列表的解决方案

我来帮你搞定这个需求!要实现按sente列区分句子,把每个句子的指定列转成(value, pos, id)元组组成的列表,用Pandas的groupby配合apply就能轻松完成,完全不用担心那些无关列的干扰。

步骤1:先构造示例DataFrame(方便你对照测试)

import pandas as pd

# 你的示例数据
data = {
    'id': [1,2,3,4,5,1,2,3,4,5],
    'pos': ['a','b','b','a','d','a','a','b','a','d'],
    'value': ['I','have','a','cat','!','My','cat','is','cute','.'],
    'sente': [21,21,21,21,21,22,22,22,22,22]
}
df = pd.DataFrame(data)

步骤2:核心代码实现分组转换

我们按sente分组,对每个分组只提取需要的列(value、pos、id),再把每行转成元组,最后收集成列表:

# 按sente分组处理,生成目标格式的列表
result = df.groupby('sente').apply(
    lambda group: list(group[['value', 'pos', 'id']].itertuples(index=False, name=None))
).tolist()

效果展示

运行后result的输出就是你想要的格式:

[
    [('I', 'a', 1), ('have', 'b', 2), ('a', 'b', 3), ('cat', 'a', 4), ('!', 'd', 5)],
    [('My', 'a', 1), ('cat', 'a', 2), ('is', 'b', 3), ('cute', 'a', 4), ('.', 'd', 5)]
]

通用函数版本(更灵活)

如果你需要经常复用这个逻辑,或者要调整列的顺序,可以封装成函数:

def generate_sentence_tuple_list(df, sentence_col, target_cols):
    """
    按指定列分组,生成每行的元组列表
    :param df: 输入的DataFrame
    :param sentence_col: 区分句子的列名(比如你的`sente`)
    :param target_cols: 需要转成元组的列顺序(比如['value', 'pos', 'id'])
    :return: 每个句子对应一个元组列表的大列表
    """
    return df.groupby(sentence_col).apply(
        lambda group: list(group[target_cols].itertuples(index=False, name=None))
    ).tolist()

# 使用示例
result = generate_sentence_tuple_list(df, 'sente', ['value', 'pos', 'id'])

这个方法会自动忽略所有无关列,只处理你指定的target_cols,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Mi.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:33:35