如何通过操作另一列来创建新列?熊猫



我正试图根据不同的条件创建一个新列。我想根据列的起始字符将字符添加到字符串中。数据示例:

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'"(字符串(。如果不是这样,请更改上面代码中的列名。

最新更新