首页 > 解决方案 > 如何通过操作另一列来创建新列?熊猫

问题描述

我正在尝试根据不同的标准创建一个新列。我想根据列的起始字符向字符串添加字符。数据示例:

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

这是引用正确的列,但没有将其拆分到我认为的位置,并且似乎无法比这更进一步。我觉得我并没有真正以正确的方式去做这件事。

标签: pythonpandas

解决方案


定义一个函数来替换arr列表中的No 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'(一个字符串)。如果不是这种情况,请更改上面代码中的列名。


推荐阅读