Python-根据其他列的条件创建新列

时间:2020-07-12 01:08:45

标签: python pandas

我有一个包含以下内容的数据框列:

Audience
searchretargeting
data-capture-320x50
purchase-behavior-320x500
data-capture-728x90

我想通过基于'-'分隔符拆分'Audience'列来创建一个新列(Audience2),理想情况下只希望保留拆分的第一个元素('data'而不是'capture- 320x50')

如果不存在“-”,我希望在新列中填充“受众群体”中的内容(例如searchretargeting):

Audience               Audience2
siteretargeting        siteretargeting
data-capture-320x50    data

我知道如何对“受众群体”列进行拆分,但是当列中不存在“-”时,我希望添加某种逻辑来绕开新列NaN。

df['Audience2']=df['Audience'].str.split('-').str[1]

这拆分了Audience列,仅保留了第一个元素,但是我一直在努力处理各种if-else和apply-lambda语句,以弄清楚如何提取没有'-'的数据而不将其作为NaN

5 个答案:

答案 0 :(得分:3)

尝试一下:

df['Audience'].str.split('-').str[0].fillna(df['Audience'])

输出:

0    searchretargeting
1                 data
2             purchase
3                 data
Name: Audience, dtype: object

答案 1 :(得分:2)

让我们来修复ffill

df.Audience.str.split('-',expand=True).ffill(axis=1).iloc[:,1]
0    searchretargeting
1              capture
2             behavior
3              capture
Name: 1, dtype: object

更多信息

df.Audience.str.split('-',expand=True).ffill(axis=1)
                   0                  1                  2
0  searchretargeting  searchretargeting  searchretargeting
1               data            capture             320x50
2           purchase           behavior            320x500
3               data            capture             728x90

答案 2 :(得分:1)

df['audience2'] = [i.split('-')[0] for i in df.audience if '-' in i else i]

这应该为你做。

答案 3 :(得分:1)

您可以尝试使用np.where

df['Audience2']=np.where(df.Audience.str.contains('-'), df.Audience.str.split('-').str[0],df.Audience)

输出:

df
                    Audience          Audience2
0          searchretargeting  searchretargeting
1        data-capture-320x50               data
2  purchase-behavior-320x500           purchase
3        data-capture-728x90               data

答案 4 :(得分:1)

您可以改用这样的东西-

df['Audience2']=df['Audience'].str.split('-').str[1]
for i in range(len(df)):
  if pd.isna(df['Audience2'][i]):
    df['Audience2'][i] = df['Audience'][i]