如何使用 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
我有一个包含两列的数据框:名称和 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