我正试图根据不同的条件创建一个新列。我想根据列的起始字符将字符添加到字符串中。数据示例:
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']))
这是引用了正确的列,但没有将其拆分到我认为的位置,而且似乎无法再进一步了。我觉得我做这件事的方式不对。
定义一个函数来替换arr列表中的元素Nopos:
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'"(字符串(。如果不是这样,请更改上面代码中的列名。