如何根据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.
相关产品推荐
相关产品推荐

