筛选出`C`列相同且`A`列值不同的行,并保留其中一个`A`值对应的行

50 阅读2分钟

筛选出C列相同且A列值不同的行,并保留其中一个A值对应的行。具体步骤如下:

  1. 找出C列相同且A列值不同的组合。
  2. 对于每个组合,保留其中一个A值对应的行。

以下是实现这一需求的代码:

import pandas as pd

# 创建DataFrame
data = {
    'A': [18, 18, 17, 17, 16, 16],
    'B': ['00004539', '00004539', '00004539', '00004539', '00004539', '00004539'],
    'C': ['068', '068', '068', '068', '068', '068'],
    'D': ['00370961', '00370966', '00370961', '00370966', '00370961', '00370966']
}
df = pd.DataFrame(data)

# 找出C列相同且A列值不同的组合
grouped = df.groupby('C').filter(lambda x: x['A'].nunique() > 1)

# 去重,保留每个C列值的第一个A列值对应的行
result = grouped.drop_duplicates(subset=['C'])

print(result)

在这个代码中,我们使用groupbyfilter来找出C列相同且A列值不同的组合。然后使用drop_duplicates保留每个C列值的第一个A列值对应的行。

如果想要保留每个C列值的特定A列值对应的行,可以对筛选后的结果进行进一步处理。比如,随机选择一个A列值:

import numpy as np

# 找出C列相同且A列值不同的组合
grouped = df.groupby('C').filter(lambda x: x['A'].nunique() > 1)

# 为每个C列值选择一个A列值对应的行
selected_rows = grouped.groupby('C').apply(lambda x: x.sample(n=1)).reset_index(drop=True)

print(selected_rows)

这样,每个C列值会随机保留一个对应的A列值行。