在 Pandas Python 中基于 Column Text 创建列



我有一个数据帧(系列('df',如下所示:

Name
A1001
A1002
B1001
C1001
A1003
B1002
B1003
C1002
D1001
D1002

我想创建一个名为"公司"的新列,如果文本以'A'开头,则应读取'Alpha',如果文本以'B'开头,'Bravo'如果文本以其他任何内容开头,则应读取'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.selectSeries.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

使用np.select创建多条件列:

letter = df['Name'].str[0]
df['Company'] = np.select([letter.eq('A'), letter.eq('B')], ['Alpha', 'Bravo'], default='Other')
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

相同的方法,但现在我们使用更"自我解释"的代码:

letter = df['Name'].str[0]
conditions = [letter.eq('A'), letter.eq('B')]
choices = ['Alpha', 'Bravo']
df['Company'] = np.select(conditions, choices, default='Other')

最新更新