Python基于其他列的条件创建新列

2024-05-14 13:29:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe列,其中包含以下内容:

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

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

如果没有“-”出现,我希望新专栏中填充“受众”中的内容(例如搜索重定目标):

Audience               Audience2
siteretargeting        siteretargeting
data-capture-320x50    data

我知道如何分割观众栏,但希望添加一些逻辑类型,以避免在栏中没有“-”时新栏为NaN

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

这分割了受众列,只保留了第一个元素,但我一直在努力解决各种if-else和apply lambda语句,以找出如何在不使用NaN的情况下提取没有“-”的数据


Tags: 数据元素dataframedfdata情况nancapture
3条回答

让我们用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

您可以尝试使用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

试试这个:

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

输出:

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

相关问题 更多 >

    热门问题