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

时间:2020-03-05 16:29:02

标签: python pandas

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

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']))

这是引用正确的列,但未按我认为的范围进行拆分,而且似乎无法做到这一点。我觉得我并不是真的在以正确的方式来做。

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