如何使用 PANDAS 中较长的字符串更改列中的数据?

How to change data in a column using the longer length of a string in PANDAS?

我有一个包含两列的数据框:名称和 ID。 在某些情况下,名称会重复,也可以缩写,但它们始终具有相同的 ID,例如:

     NAMES          ID
 1. Peter Elliot  12345678

 2. Peter Elliot  12345678

 3. Peter E.      12345678

 4. Lucas Kershaw 87654321

 5. Lucas Kershaw 87654321

 6. Lucas Kershaw 87654321

 7. L. Kershaw    87654321

...其他人的姓名和身份证...

所以我的 objective 是使用较长的字符串长度来格式化名称,并使用 ID 作为参考。

结果应该是:

     NAMES          ID
 1. Peter Elliot  12345678

 2. Peter Elliot  12345678

 3. Peter Elliot  12345678

 4. Lucas Kershaw 87654321

 5. Lucas Kershaw 87654321

 6. Lucas Kershaw 87654321

 7. Lucas Kershaw 87654321

...其他人的姓名和身份证...

我试过这样的事情:

a = np.asarray(general['ids']

for j in range(len(a)):

    ToF = df['ids'] == a[j]   
    filts = df[ToF] 
    filtdf = filts.loc[filt, ['names']] 
    read_longer_string = filt400.names.astype(str).map(len)

    if read_longer_string.argmax() == read_longer_string.argmin():
        print('nothing should happen')

    elif read_longer_string.argmax() != read_longer_string.argmin():
        longer_string = filtfd.loc[read_longer_string.argmax(), 'names']   
        df['names'] = df['names'].where(filt == False, df['names'].apply(longer_string.format), errors = 'ignore')

使用Series.str.len with groupby.transform:

df['NAMES'] = (df.loc[df['NAMES']
                 .str.len()
                 .groupby(df['ID'], sort=False)
                 .transform('idxmax'),'NAMES'].values)
print(df)
           NAMES        ID
1   Peter Elliot  12345678
2   Peter Elliot  12345678
3   Peter Elliot  12345678
4  Lucas Kershaw  87654321
5  Lucas Kershaw  87654321
6  Lucas Kershaw  87654321
7  Lucas Kershaw  87654321