筛选出C列相同且A列值不同的行,并保留其中一个A值对应的行。具体步骤如下:
- 找出
C列相同且A列值不同的组合。 - 对于每个组合,保留其中一个
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)
在这个代码中,我们使用groupby和filter来找出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列值行。