熊猫删除对一列具有不同价值的行,但对所有其他列重复

时间:2020-10-18 22:04:03

标签: python pandas

我在python中的熊猫中有一个数据框,其中包含刑事指控和个人ID。某些费用针对同一ID列出两次,因为一个人有2次或更多次相同费用的计数。有些被列出两次,因为它曾在地方法院审理过一次,然后移交给上级法院。按个人分组,我想确定这些指控,然后从地方法院删除该指控。

这是一个示例数据集:

d = {'ID': [1, 1, 1, 1, 2, 2, 2, 3, 3], 
     'Court': ['district', 'district', 'district', 'superior', 'district', 'district', 'superior', 'district', 'superior'], 
     'Charge': ['larceny', 'larceny', 'assault', 'assault', 'oui', 'larceny', 'assault', 'assault', 'assault']}
df = pd.DataFrame(data=d)

    ID  Court       Charge
0   1   district    larceny
1   1   district    larceny
2   1   district    assault
3   1   superior    assault
4   2   district    oui
5   2   district    larceny
6   2   superior    assault
7   3   district    assault
8   3   superior    assault

我可以通过ID和费用识别重复项。但这必须是ID和Charge的重复项,但Court的值不同

这是我想要的结果:


    ID  Court       Charge
0   1   district    larceny
1   1   district    larceny
2   1   superior    assault
3   2   district    oui
4   2   district    larceny
5   2   superior    assault
6   3   superior    assault

我可以使用duplicated()来识别“重复”费用,但是不确定在删除之前如何确保重复对法院有两个不同的值。 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

编辑:要解决具有相同Charge的不同情况,可以用this answer所示的运行号来表示:

# a hypothetical case_id
df["case_id"] = df.groupby(["ID", "Charge", "Court"]).cumcount() + 1

然后按["ID", "Charge", "case_id"]对数据集进行分组,并使用.max()通过字母顺序(“ s”上位词>“ d”段)来获取最后一个Court。您无需创建表示superior=1district=0的附加标签列。

# aggreagate
df_out = df.groupby(["ID", "Charge", "case_id"]).max().reset_index()
del df_out["case_id"]

# result
df_out    
Out[45]: 
   ID   Charge     Court
0   1  assault  superior
1   1  larceny  district
2   1  larceny  district
3   2  assault  superior
4   2  larceny  district
5   2      oui  district
6   3  assault  superior