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

为Pandas DataFrame的sente列填充值并按该列分组处理

解决Pandas DataFrame填充缺失值与分组处理的方案

嘿,我来帮你搞定这个Pandas数据处理的需求!针对你给出的DataFrame,我们可以分两步完成操作:填充sente列的缺失值,再按sente分组并创建新列。

第一步:填充sente列的缺失值

你需要把sente列为空的行填充为上方最近的非空值,这在Pandas里用**向前填充(ffill)**就能轻松实现,代码如下:

import pandas as pd

# 先构造你的原始DataFrame
data = {
    'id': [1,2,3,4,5,6,7,8,9,10,11,12,13],
    'pos': ['a','b','b','a','d','cat','a','a','b','a','d','cat','cute'],
    'value': ['I','have','a','cat','!','N','My','cat','is','cute','.','N','M'],
    'sente': [21,21,21,21,21,None,22,22,22,22,22,None,None]
}
df = pd.DataFrame(data)

# 用向前填充法填充sente列的缺失值
df['sente'] = df['sente'].ffill()

执行后,行6、12、13的sente值会分别被填充为21、22、22,完全符合你“取上方行sente值”的要求。

第二步:按sente分组并创建新列

接下来按sente分组,根据数据特征(看起来是分句的单词集合),这里给出两种常见的新列创建方案:

方式1:分组聚合生成精简新表

如果需要将每组内容聚合为一行(比如把每组的value拼接成完整分句),可以用agg方法:

# 按sente分组,拼接每组的value为句子,同时统计组内行数
grouped_df = df.groupby('sente').agg(
    complete_sentence=('value', ' '.join),  # 拼接value成完整内容
    total_rows=('id', 'count')              # 可选:统计每组的总行数
).reset_index()

生成的grouped_df结果如下:

sentecomplete_sentencetotal_rows
21I have a cat ! N6
22My cat is cute . N M7

方式2:在原表中添加分组关联列

如果需要保留原表所有行,同时让每行都显示所属组的聚合结果(比如每行都标注所在分句的完整内容),可以用transform方法:

# 在原DataFrame中添加新列,显示当前行所属sente组的完整拼接内容
df['complete_sentence'] = df.groupby('sente')['value'].transform(' '.join)

处理后的原表部分内容示例:

idposvaluesentecomplete_sentence
1aI21I have a cat ! N
6catN21I have a cat ! N
7aMy22My cat is cute . N M
13cuteM22My cat is cute . N M

自定义新列的其他思路

如果你的新列需求不是拼接内容,也可以灵活调整聚合逻辑:

  • 统计每组行数:df['group_size'] = df.groupby('sente')['id'].transform('count')
  • 取每组第一个value:df['first_word'] = df.groupby('sente')['value'].transform('first')
  • 提取每组value的唯一值:df['unique_values'] = df.groupby('sente')['value'].transform(lambda x: ', '.join(set(x)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:09:02