熊猫:遍历列中的字符串列表并使用字符串创建新列

时间:2019-12-10 15:27:44

标签: string pandas for-loop

目标:我想搜索DF中名为“个人资料名称”的列,以及该名称的一部分是否包含特定市场。例如,如果“配置文件名称”(XX-France-AM)包含“ France”,我想将字符串“ France”添加到DF中名为“ Markets”的新列中。理想情况下,我想使用一个循环遍历5个不同的市场并应用相同的逻辑(即,如果“配置文件名称”包含意大利,则将意大利添加到“市场”。

我尝试了许多不同的版本来做到这一点,但这似乎是最接近的:

markets = ['France','Spain','UK','Germany','Italy']
for name in markets:
    if df[df['Profile Name'].str.contains(name, na=False) == True]:
       df['Market'] = name

它给我这个错误: ValueError:DataFrame的真实值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

有人建议我如何做到最好吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以在一行中完成所有操作:

df['Market'] = df['Profile Name'].str.extract(f'({"|".join(markets)})')

更新:运行时比较(len(df) = 8000)。

%%timeit -n 100
df['Market'] = df['Profile Name'].str.extract(f'({"|".join(markets)})')
# 8.46 ms ± 151 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit -n 100
for name in markets:
    df.loc[df['Profile Name'].str.contains(name, na=False, regex=False), 'Market'] = name
# 16.7 ms ± 200 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

答案 1 :(得分:0)

使用pandas的.loc []语法:

<ul>
   <li>apple</li>
   <li class="highlight">orange</li>
   <li>pear</li>
   <li>banana</li>
</ul>