如何在Python中删除基于部分字符串的重复行

如何在Python中删除基于部分字符串的重复行,python,pandas,Python,Pandas,如果我有如下数据框,其中01和02、03和04、05和06是相同的: id city 01 New York City 02 New York 03 Tokyo City 04 Tokyo 05 Shanghai City 06 Shanghai 07 Beijing City 08 Paris 09 Berlin 如何删除重复项并获取以下数据帧?谢谢 id city 01 New York 02 Tokyo 0

如果我有如下数据框,其中01和02、03和04、05和06是相同的:

id    city
01    New York City
02    New York
03    Tokyo City
04    Tokyo
05    Shanghai City
06    Shanghai
07    Beijing City
08    Paris
09    Berlin
如何删除重复项并获取以下数据帧?谢谢

id    city
01    New York 
02    Tokyo 
03    Shanghai
04    Beijing City
05    Paris
06    Berlin

现在,使用drop_duplicates和keep参数,在pandas中,这要容易得多

# dataset
df = pd.DataFrame({'id':[1,2,3,4],'city':['New York City','New York','Tokyo City','Tokyo']})
# replace values
df.city = df.city.str.replace('City','').str.strip()
# drop duplicate (answer of original question)
df.drop_duplicates(subset=['city'])

将城市部分替换为空字符串,并保留第一行以应用组

df=pd.DataFrame({'id':[1,2,3,4],'city':['New York City','New York','Tokyo City','Tokyo']})
df看起来像这样

    city            id
0   New York City   1
1   New York        2
2   Tokyo City      3
3   Tokyo           4
应用replace和groupby以获取每个组中的第一行

df.city=df.city.str.replace('City','').str.strip()
df.groupby('city').first().sort_values('id')
输出:

city       id
New York    1
Tokyo       3
或者在列的子集上使用drop_重复项。谢谢@JR ibkr

df.drop_duplicates(subset='city')

北京不能成为北京吗?对不起,在我的真实数据中,它不是规则的。可能重复@JRibkr我的朋友它不是完全重复的。在删除重复项之前,需要进行一些数据操作。谢谢你的努力,但你不觉得这太过分了吗。为什么不使用drop_副本?默认情况下,它将保留第一次出现。@JRibkr
drop_duplicates
的默认行为是检查所有列中是否存在重复值,但可以使用subset param检查特定字段中是否存在重复。编辑了答案。感谢您更新您的解决方案以反映简易方式?许多人查找stackoverflow以获得简单高效的解决方案。然后创建一个包含城市名称部分的数据框并应用drop\u duplicate这个问题是重复的问题。