熊猫根据现有列值创建新列

时间:2020-08-07 17:51:28

标签: pandas startswith

我正在基于现有列中的值创建一个新列。如果现有列以“ abc”或“ def”开头,则将新列设置为“ x”。否则将其设置为“ y”。

检查应该不区分大小写。

我有类似这样的东西–

import pandas as pd

df = pd.DataFrame({'command': ['abc123', 'abcdef', 'hold',
                               'release', 'hold', 'abcxyz',
                               'kill', 'def123', 'hold'],
                   'name': ['fred', 'wilma', 'barney',
                            'fred', 'barney', 'betty',
                            'pebbles', 'dino', 'wilma'],
                   'date': ['2020-05', '2020-05', '2020-05',
                            '2020-06', '2020-06', '2020-06',
                            '2020-07', '2020-07', '2020-07']})

有印刷品-

   command     date     name
0   abc123  2020-05     fred
1   abcdef  2020-05    wilma
2     hold  2020-05   barney
3  release  2020-06     fred
4     hold  2020-06   barney
5   abcxyz  2020-06    betty
6     kill  2020-07  pebbles
7   def123  2020-07     dino
8     hold  2020-07    wilma

我正在寻找类似这样的东西-

  command     date     name   status
0  abc123  2020-05     fred        x
1  abcdef  2020-05    wilma        x
2    hold  2020-05   barney        y
3     CHG  2020-06     fred        y
4    hold  2020-06   barney        y
5  abcxyz  2020-06    betty        x
6    kill  2020-07  pebbles        y
7  def123  2020-07     dino        x
8    hold  2020-07    wilma        y

使用以下命令,如果值等于-

,我可以使工作正常
def source(row):
    if row['command'] == 'abcdef':
        return 'x'
    else:
        return 'y'


# Apply the results from the above Function
df['source'] = df.apply(source, axis=1)

但是命令值可以是任何值,我无法对每种可能性进行硬编码搜索。

我不知道如何使用startswith使它正常工作。

1 个答案:

答案 0 :(得分:2)

Series.str.startswithnp.where用于条件列:

m = df['command'].str.startswith(('abc', 'def'))
df['status'] = np.where(m, 'x', 'y')

或者只是将前三个字符切成薄片并使用Series.isin

m = df['command'].str[:3]
m = m.isin(['abc', 'def'])

df['status'] = np.where(m, 'x', 'y')
   command     name     date status
0   abc123     fred  2020-05      x
1   abcdef    wilma  2020-05      x
2     hold   barney  2020-05      y
3  release     fred  2020-06      y
4     hold   barney  2020-06      y
5   abcxyz    betty  2020-06      x
6     kill  pebbles  2020-07      y
7   def123     dino  2020-07      x
8     hold    wilma  2020-07      y