Pandas数据处理需求:合并列及条件删除/聚合操作
Pandas DataFrame 处理方案
先给出原始数据的创建代码:
import pandas as pd # 原始DataFrame df = pd.DataFrame({ 'A': ['A', 'A', 'B'], 'B': ['Apple', 'Apple', 'Banana'], 'C': ['x', 'y', 'x'] })
1. 合并A、B列为D列
直接通过字符串拼接生成新列D,格式为B列值 + 空格 + A列值,如果不需要保留原A、B列可以直接删除:
# 生成D列 df['D'] = df['B'] + ' ' + df['A'] # 可选:删除原A、B列 df = df.drop(columns=['A', 'B'])
执行后得到的结果:
| C | D | |
|---|---|---|
| 0 | x | Apple A |
| 1 | y | Apple A |
| 2 | x | Banana B |
2. 针对含C='x'的A、B组的两种操作
操作一:删除所有对应相同A、B值的行
先定位出所有包含C='x'的A、B组合,再过滤掉这些组合的全部行:
# 若之前删除了A、B列,可从D列拆分恢复:df[['B','A']] = df['D'].str.split(' ', expand=True) groups_to_remove = df[df['C'] == 'x'][['A', 'B']].drop_duplicates() # 生成过滤掩码 mask = df.merge(groups_to_remove, on=['A', 'B'], how='left').notna().any(axis=1) # 过滤得到结果 result_delete = df[~mask]
最终结果(移除所有A='A'的行):
| A | B | C | D | |
|---|---|---|---|---|
| 2 | B | Banana | x | Banana B |
操作二:将相同A、B值对应的C列值聚合为数组
按A、B(或直接按D列,因为D是A+B的唯一组合)分组,把C列的值聚合为列表:
# 按A、B、D分组,聚合C列为列表 result_aggregate = df.groupby(['A', 'B', 'D'])['C'].agg(list).reset_index()
最终结果:
| A | B | D | C | |
|---|---|---|---|---|
| 0 | A | Apple | Apple A | ['x', 'y'] |
| 1 | B | Banana | Banana B | ['x'] |
内容的提问来源于stack exchange,提问作者terrenana
相关产品推荐
相关产品推荐

