如何基于列条件合并Pandas近重复行并生成目标列?
Pandas近重复行合并分组实现方案
完整代码实现
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Name': ['A', 'A', 'A', 'B', 'B'], 'Text': ['Ab', 'Abc', 'Abcd', 'A', 'Ab'], 'Value1': [2, 0, 2, 0, 2] }) # 分组聚合生成目标DataFrame result_df = df.groupby('Name').agg( # 合并Value1为列表 Value1_concat=('Value1', list), # 统计Value1等于2的数量 Criteria1=('Value1', lambda col: sum(col == 2)), # 拼接符合条件的Text(Value1=2对应的文本) Text_Criteria1=('Text', lambda col: '. '.join(col[df.loc[col.index, 'Value1'] == 2]) + '.'), # 统计分组内总元素数 Total=('Value1', 'count') ).reset_index() print(result_df)
代码说明
- Value1_concat:通过
list聚合函数直接将每个分组的Value1值打包成列表。 - Criteria1:利用布尔序列求和(
True会被识别为1),快速统计分组内Value1等于2的元素数量。 - Text_Criteria1:通过索引匹配,筛选出当前分组中
Value1等于2对应的Text值,用.连接后添加末尾句号,和目标格式一致。如果不需要末尾句号,删除+ '.'即可。 - Total:使用
count聚合函数直接统计分组内的行数,也就是Value1_concat的总元素数。
运行结果
| Name | Value1_concat | Criteria1 | Text_Criteria1 | Total |
|---|---|---|---|---|
| A | [2, 0, 2] | 2 | Ab. Abcd. | 3 |
| B | [0, 2] | 1 | Ab. | 2 |
内容的提问来源于stack exchange,提问作者stephsmith
相关产品推荐
相关产品推荐

