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

如何在Pandas中删除与同DataFrame内M标记行多列匹配的行

问题:删除同netting分组下与M标记行数据重复的非M行

需求明确:在包含netting字段的DataFrame里,删掉所有Total、first、second列值和同netting分组内标记为M的行完全一致的非M行。

示例数据与初始DataFrame

import pandas as pd

data = {
    'netting': ['01', '01', '01', '01', '01', '02', '02'],
    'Total': [9358.66, 9358.66, 9358.66, 9358.66, 9358.66, 100.00, 100.00],
    'first': [358.69, 358.69, 358.69, 358.69, 358.69, 100.00, 100.00],
    'second': [9717.35, 717.35, 9717.35, 9717.35, 9717.35, 100.00, 100.00],
    'lable': ['M', 'X', 'X', 'X', 'X', 'M', 'Y']
}

df = pd.DataFrame(data)

初始DataFrame输出:

netting    Total   first   second lable
0      01  9358.66  358.69  9717.35     M
1      01  9358.66  358.69   717.35     X
2      01  9358.66  358.69  9717.35     X
3      01  9358.66  358.69  9717.35     X
4      01  9358.66  358.69  9717.35     X
5      02   100.00  100.00   100.00     M
6      02   100.00  100.00   100.00     Y

解决方案代码

# 提取每个netting分组中lable为M的行的关键列数据,作为参考模板
m_templates = df[df['lable'] == 'M'].set_index('netting')[['Total', 'first', 'second']]

# 合并模板到原DataFrame,方便对比
df_with_template = df.merge(m_templates, on='netting', suffixes=('', '_m'))

# 标记需要删除的行:非M行,且三个关键列和模板完全一致
to_drop = (df_with_template['lable'] != 'M') & \
          (df_with_template['Total'] == df_with_template['Total_m']) & \
          (df_with_template['first'] == df_with_template['first_m']) & \
          (df_with_template['second'] == df_with_template['second_m'])

# 过滤得到最终结果
final_df = df[~to_drop].reset_index(drop=True)

print(final_df)

最终输出结果

netting    Total   first   second lable
0      01  9358.66  358.69  9717.35     M
1      01  9358.66  358.69   717.35     X
2      02   100.00  100.00   100.00     M

步骤解释

  • 先提取每个netting分组里的M行数据,作为该分组的"基准数据"
  • 将基准数据合并回原表,让每一行都能和同组的基准数据做对比
  • 筛选出非M行且三个关键列全与基准匹配的行,标记为待删除
  • 反向筛选保留不需要删除的行,得到目标结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:20:00