首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据前两个字母替换pandas数据框列的一部分

根据前两个字母替换pandas数据框列的一部分
EN

Stack Overflow用户
提问于 2020-08-28 01:48:13
回答 2查看 43关注 0票数 0

我有一个pandas dataframe,我需要根据前两个字母有条件地更新值。这个模式很简单,下面的代码也可以工作,但感觉不像蟒蛇。我需要将其扩展到其他字母(至少11-19/A-J),虽然我可以只添加额外的行,但我真的希望以正确的方式做到这一点。下面的现有代码

代码语言:javascript
复制
df['REFERENCE_ID'] = df['PRECERT_ID'].astype(str)
df.loc[df['REFERENCE_ID'].str.startswith('11'), 'REFERENCE_ID'] = 'A' + df['PRECERT_ID'].str[-7:]
df.loc[df['REFERENCE_ID'].str.startswith('12'), 'REFERENCE_ID'] = 'B' + df['PRECERT_ID'].str[-7:]
df.loc[df['REFERENCE_ID'].str.startswith('13'), 'REFERENCE_ID'] = 'C' + df['PRECERT_ID'].str[-7:]
df.loc[df['REFERENCE_ID'].str.startswith('14'), 'REFERENCE_ID'] = 'D' + df['PRECERT_ID'].str[-7:]
df.loc[df['REFERENCE_ID'].str.startswith('15'), 'REFERENCE_ID'] = 'E' + df['PRECERT_ID'].str[-7:]

我想我也许可以用字母列表,比如

代码语言:javascript
复制
letters = list(string.ascii_uppercase)

但是我对dataframe (以及一般的python )是个新手,并且不知道如何获得dataframe的等价物

代码语言:javascript
复制
letters = list(string.ascii_uppercase)
text = '1523456789'
first = int(text[:2])
text = letters[first-11] + text[-7:]

我找不到解决这个问题的方法,但如果有任何帮助或类似问题的链接,我将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-28 01:52:17

代码语言:javascript
复制
df['REFERENCE_ID'] = df['PRECERT_ID'].astype(str)

# Save all uppercase english letters in a list
letters = list(string.ascii_uppercase)

# Enumerate over the letters list and start with 11 as the OP wants in this way only. 
# All the uppercase english letters and corresponding numbers starting with 11. 
for i,l in enumerate(letters, start=11):
    df.loc[df['REFERENCE_ID'].str.startswith(str(i)), 'REFERENCE_ID'] = l + df['PRECERT_ID'].str[-7:]
票数 0
EN

Stack Overflow用户

发布于 2020-08-28 02:37:55

我会试着查个字典,然后用map来加快速度。

要创建查找字典,您可以使用:

代码语言:javascript
复制
lu_dict = dict(zip([str(i) for i in range(11,20)],[chr(i) for i in range(65,74)]))

它返回:

代码语言:javascript
复制
{'11': 'A',
 '12': 'B',
 '13': 'C',
 '14': 'D',
 '15': 'E',
 '16': 'F',
 '17': 'G',
 '18': 'H',
 '19': 'I'}

然后,您可以使用.str.slice.map来避免for循环。

代码语言:javascript
复制
df = pd.DataFrame(data = {'Reference_ID':['112326345','12223356354','6735435634']})
df.Reference_ID = df.Reference_ID.astype(str)

df.loc[:,'Reference_new'] = df.Reference_ID.str.slice(0,2).map(lu_dict) + df.Reference_ID.str.slice(-7, )

这会导致:

代码语言:javascript
复制
  Reference_ID Reference_new
0    112326345      A2326345
1  12223356354      B3356354
2   6735435634           NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63621597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档