删除有条件的重复项

时间:2021-04-05 20:13:33

标签: python pandas

我有以下熊猫数据框:

<头>
索引 so_id
10 390
10 395
10 405
11 390
11 395
11 405
12 390
12 395
12 405

所需的输出如下:

<头>
索引 so_id
10 390
11 395
12 405

基本上我的目标是删除列 'index' 上的重复项,同时为列 'so_id' 保留不同的升序值

2 个答案:

答案 0 :(得分:1)

我们可以做到,但重要的是,请注意上面的评论。

df=df.sort_values (by=['so_id'])#Sort df

创建临时列t,它是so_idresort df的分类回到原来的df=df.assign(t=df['so_id'].ne(df['so_id'].shift(1)).cumsum()).sort_values(by='index')

创建索引的临时分类

df=df.assign(t1=df['index'].ne(df['index'].shift(1)).cumsum())

选择上面两个类相似的地方

df=df[df['t']==df['t1']].drop(columns=['t','t1'])

print(df)

    index  so_id
0     10    390
4     11    395
8     12    405

答案 1 :(得分:1)

在这里,我创建了一个字典,通过将值添加到集合以获得唯一值,然后按所需的升序排序,将旧索引映射到新索引。字典形成后,我们可以检查特定行中的值是否与字典中的数据匹配,如果匹配,则该组合是正确的,我们对该行不做任何事情,如果不匹配,我们只需删除那一行:

import pandas as pd
df = pd.DataFrame([[10, 390], [10, 395], [10, 405], [11, 390], [11, 395], [11, 405], [12, 390], [12, 395], [12, 405]], columns=['id', 'so_id'])
idx_map = {}
idx=set()
new_idx=set()
for row in df.iterrows():
    idx.add(row[1]['id'])
    new_idx.add(row[1]['so_id'])

for i in range(len(idx)):
    idx_map[sorted(idx)[i]]=sorted(new_idx)[i]


for idx, row in df.iterrows():
    if idx_map[row[0]]==row[1]:
        continue
    else:
        df = df.drop(idx)

print(df)

输出

   id  so_id
0  10    390
4  11    395
8  12    405

这里,idx_map 字典是这样的:

{10: 390, 11: 395, 12: 405}