我在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()来识别“重复”费用,但是不确定在删除之前如何确保重复对法院有两个不同的值。 感谢您的帮助!
答案 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=1
和district=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