Pandas 熊猫,删除重复行,保留字符串长度最短的行

Pandas 熊猫,删除重复行,保留字符串长度最短的行,pandas,dataframe,Pandas,Dataframe,我有以下称为df的数据帧: Name Symbol Downer NEE Downer NEE AX O Downer NEE.O Next In EXC Next In EXCA Next In EXC AZ .. 基本上我想做这件事,如果有一个重复的名称,我想选择较短的符号长度,并删除其余的 因此,我希望输出如下所示: Name Symbol Downer NEE Next In EXC ... 我尝试使用drop_duplicates

我有以下称为df的数据帧:

Name     Symbol   
Downer   NEE
Downer   NEE AX O
Downer   NEE.O
Next In  EXC
Next In  EXCA
Next In  EXC AZ
..
基本上我想做这件事,如果有一个重复的名称,我想选择较短的符号长度,并删除其余的

因此,我希望输出如下所示:

Name     Symbol   
Downer   NEE
Next In  EXC
...

我尝试使用drop_duplicates,但它只允许我选择first或last。如何根据这种字符串长度条件选择行?

如果我理解正确,您需要str.len和sort\u值

我们将根据名称删除重复项,保持第一个实例的最小len

df1 = (
    df.assign(count=(df["Symbol"].str.len()))
    .sort_values("count")
    .drop_duplicates(subset=["Name"], keep="first")
).drop('count',axis=1)
另一种方法是使用groupby.min

或者是耶兹雷尔提出的最简单的解决方案

df.loc[df["Symbol"].str.len().groupby(df['Name']).idxmin]

如果我理解正确,您需要str.len和sort_值

我们将根据名称删除重复项,保持第一个实例的最小len

df1 = (
    df.assign(count=(df["Symbol"].str.len()))
    .sort_values("count")
    .drop_duplicates(subset=["Name"], keep="first")
).drop('count',axis=1)
另一种方法是使用groupby.min

或者是耶兹雷尔提出的最简单的解决方案

df.loc[df["Symbol"].str.len().groupby(df['Name']).idxmin]