我正尝试根据不同条件创建新列。我想根据列的起始字符将字符添加到字符串中。 数据示例:
RH~111~header~120~~~~~~~ball
RL~111~detailed~12~~~~~hat
RA~111~account~13~~~~~~~~~car
我想更改以RH和RL开头的那些,而不是更改以RA开头的那些。所以我想看起来像:
RH~111~header~120~~1~~~~~ball
RL~111~detailed~12~~cancel~~~ball
RA~111~account~12~~~~~~~~~ball
我尝试使用str split,但实际上似乎并未将字符串拆分
(np.where(~df['1'].str.startswith('RH'),
df['1'].str.split('~').str[5],
df['1']))
这是引用正确的列,但未按我认为的范围进行拆分,而且似乎无法做到这一点。我觉得我并不是真的在以正确的方式来做。
答案 0 :(得分:1)
在 arr 列表中定义一个函数来替换元素编号 pos :
def repl(arr, pos):
arr[pos] = '1' if arr[0] == 'RH' else 'cancel'
return '~'.join(arr)
然后执行替换:
df[0] = df[0].mask(df[0].str.match('^R[HL]'),
df[0].str.split('~').apply(repl, pos=5))
详细信息:
str.match
规定仅替换适当的元素。df[0].str.split('~')
将字符串列拆分为一列
列表(由于拆分每个字符串而导致)。apply(repl, pos=5)
计算要吸收的值。我假设您有一个带有单个列的DataFrame,所以它的列 名称是 0 (整数),而不是'1'(字符串)。 如果不是这种情况,请在上面的代码中更改列名。