Pandas 熊猫,删除重复行,保留字符串长度最短的行
我有以下称为df的数据帧: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
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]