python - 在 Pandas Python 中基于列文本创建列
问题描述
我有一个如下所示的数据框(系列)'df'
:
Name
A1001
A1002
B1001
C1001
A1003
B1002
B1003
C1002
D1001
D1002
我想创建一个名为 Company 的新列,如果文本'Alpha'
以.'A'
'Bravo'
'B'
'Others'
我试过了:
df['Company'] = 'Alpha' if df.Name.str.startswith('A') else 'Other'
但它给了我一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
预期输出:
Name Company
A1001 Alpha
A1002 Alpha
B1001 Bravo
C1001 Other
A1003 Alpha
B1002 Bravo
B1003 Bravo
C1002 Other
D1001 Other
D1002 Other
怎么做到呢?
解决方案
numpy.select
与 一起使用Series.str.startswith
:
df['Company'] = np.select([df.Name.str.startswith('A'),
df.Name.str.startswith('B')],
['Alpha', 'Bravo'],
default='Other')
print (df)
Name Company
0 A1001 Alpha
1 A1002 Alpha
2 B1001 Bravo
3 C1001 Other
4 A1003 Alpha
5 B1002 Bravo
6 B1003 Bravo
7 C1002 Other
8 D1001 Other
9 D1002 Other
推荐阅读
- discord.py - async def on_ready(): SyntaxError: invalid syntax
- python - Numpy Array 行的最小索引
- python - 两个具有相同结构的python包使用来自其他包的同名函数
- dynamic - Excel 中的动态列选择
- hangfire - 在所有分布式服务器实例中运行作业
- python - 如何自动运行新索引
- python - 包括 Scaling 和 PCA 作为 GridSearchCV 的参数
- amazon-web-services - AWS Client VPN 客户端-客户端通信
- python - Docker 容器无法访问同一网络上的外部 IP 地址
- python - 这行代码中 Index = False 的含义