我想添加条件以提取数据框中的重复行
DF
KEY STAT NUM ID
ab L 3 1678
cd D 4 23221
ab D 8 1678
cd L 0 38754
对于重复键,我需要检查ID是否相同,然后保留这两行。 如果ID不同,那么我需要检查NUM,并保留NUM值较大的值,而忽略其他
预期产量
KEY STAT NUM ID
ab L 3 1678
cd D 4 23221
ab D 8 1678
def func(d):
if d.KEY.nunique()>=1:
if d.ID.nunique()>=1:
return d
else:
return d.nlargest(1,columns=['NUM'])
else:
return d
pd.concat([func(d) for _, d in DF.groupby('KEY')])
答案 0 :(得分:1)
创建一个函数并将其用于每个组
def f(d):
if d.ID.nunique() == 1:
return d.assign(KEY=d.KEY.str.cat(d.STAT, sep='+'))
else:
return d.nlargest(1, columns=['NUM'])
pd.concat([f(d) for _, d in df.groupby('KEY')])
KEY STAT NUM ID
0 ab+L L 3 1
2 ab+D D 8 1
1 cd D 4 2
答案 1 :(得分:0)
尝试
# Sort values by NUM
df.sort_values(by='NUM', ascending=False, inplace=True)
# Find which group len > 1
mask = df.groupby(['KEY', 'ID']).ID.transform('count') > 1
df.loc[mask, 'KEY'] = df[mask].KEY + '+' + df[mask].STAT
# Get duplicated KEY index
id_drop = df.loc[~mask].drop_duplicates('KEY', keep='last').index
# Drop the duplicated KEY
df.drop(index=id_drop, inplace=True)
df
KEY STAT NUM ID
2 ab+D D 8 1
1 cd D 4 2
0 ab+L L 3 1
答案 2 :(得分:0)
我找到了一个很好的答案,可以在此处计算数据帧的一列中值的频率:
count the frequency that a value occurs in a dataframe column
基本上要在数据框中提取重复项,请尝试:
# create a count column
df['Count'] = df.groupby('your_col')['your_col'].transform('count')
# Filter out Count = 1
df = df[(df.Count > 1)]