首页 > 解决方案 > 如果找到,Pandas 检查列中 x 的子字符串,将字符串添加到 x

问题描述

我的数据框每个字符串最多有 2 个变体,例如,如果字符串是“USD”,那么有时还会出现另一个带有“LDUSD”的条目......没有“LD”的条目总是存在。

我需要应用 x[0:2]+'_'+x[2:] 但仅当列包含 x[2:] 的完全匹配时。

必须这样做以确保更改仅发生在相关条目上,因为还有各种项目在其默认名称中包含“LD”,例如(“EGLD”、“LDO”、“SLD”)或包含当前 x 字符串,例如('TUSD','USDT')。

df['Asset'] = df['Asset'].apply(lambda x: x[0:2]+'_'+x[2:] if x[2:] in df['Asset'] else x)

... in ...之后的部分不起作用,我不知道下一步如何进行。如何检查列 ['Asset'] 是否与 x[2:] 完全匹配?

抱歉标题我真的不知道该怎么称呼这个...

编辑大约 400 个示例:

df['Asset'] = ['1INCH','AAVE','ADA','ALGO','EGLD','DASH','LDO','TUSD','USDT','LD1INCH','LDALGO','LDEGLD','LDDASH','LDLDO','LDTUSD','LDUSDT',]

我需要的:

df['Asset'] = ['1INCH','AAVE','ADA','ALGO','EGLD','DASH','LDO','TUSD','USDT','LD_1INCH','LD_ALGO','LD_EGLD','LD_DASH','LD_LDO','LD_TUSD','LD_USDT',]

标签: pythonpandaslambda

解决方案


您可以使用str.contains()来测试是否any()匹配rf'^{x[2:]}$'

df['Asset'] = df['Asset'].apply(lambda x: x[:2]+'_'+x[2:]
    if df['Asset'].str.contains(rf'^{x[2:]}$', regex=True).any() else x)

对于正则表达式,添加r以使其成为原始字符串。在这种情况下,我们还添加了,所以我们可以通过f-stringf进行插值:x[2:]

  • ^- 字符串的开头
  • {x[2:]}x[2:]-在 f 字符串内插值
  • $- 字符串结束

推荐阅读