Python - 基于其他列条件的新列[重复]
Posted
技术标签:
【中文标题】Python - 基于其他列条件的新列[重复]【英文标题】:Python - New Column based on condition of other Column [duplicate] 【发布时间】:2020-11-01 11:36:45 【问题描述】:我有一个包含以下内容的数据框列:
Audience
searchretargeting
data-capture-320x50
purchase-behavior-320x500
data-capture-728x90
我想通过基于“-”分隔符拆分“受众”列来创建一个新列 (Audience2),理想情况下只想保留拆分的第一个元素(“数据”而不是“捕获- 320x50')
如果没有“-”,我希望用“受众”中的内容填充新列(例如搜索重定向):
Audience Audience2
siteretargeting siteretargeting
data-capture-320x50 data
我知道如何拆分 Audience 列,但是当列中没有“-”时,我希望添加某种类型的逻辑来规避新列为 NaN
df['Audience2']=df['Audience'].str.split('-').str[1]
这会拆分 Audience 列并仅保留第一个元素,但我一直在努力使用各种 if-else 和 apply-lambda 语句来弄清楚如何提取没有“-”而不是 NaN 的数据
【问题讨论】:
【参考方案1】:试试这个:
df['Audience'].str.split('-').str[0].fillna(df['Audience'])
输出:
0 searchretargeting
1 data
2 purchase
3 data
Name: Audience, dtype: object
【讨论】:
这很聪明~ 不错的答案。虽然如果我们得到第一个项目str[0]
比fillna
有必要吗?如果我们使用str[0]
而不使用fillna
,我似乎得到了原始值。
@MasayoMusic NaN 来自于 '-' 没有出现在原始字符串中的事实,因此 split
方法返回一个 NaN,没有列表所以得到 str[0] 是不可能。【参考方案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
【讨论】:
【参考方案3】:你可以试试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】:你可以改用这样的东西 -
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]
【讨论】:
【参考方案5】:df['audience2'] = [i.split('-')[0] for i in df.audience if '-' in i else i]
这应该为你做。
【讨论】:
以上是关于Python - 基于其他列条件的新列[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Pandas df 操作:如果其他列行重复,则带有值列表的新列 [重复]