我有一個像這樣的資料集
| 姓名 | 位置 |
|---|---|
| 西蒙 | 廚師 |
| 大衛 | 助理廚師 |
| 菲利普 | 學院廚師 |
| 拉斐爾 | 助理廚師 |
| 格雷戈里 | 學院廚師 |
| 丹妮 | 助理研究員 |
| 迭戈 | 院士 |
| 帕特里克 | 助理研究員 |
| 羅伯特 | 院士 |
| 格倫 | 廚師 |
| 邁克爾 | 助理廚師 |
| 威廉 | 學院廚師 |
| 卡特 | 助理廚師 |
| 安東尼 | 學院廚師 |
| 提摩太 | 助理研究員 |
| 杰里米 | 院士 |
| 布賴恩 | 助理研究員 |
| 凱撒 | 院士 |
現在我想根據 Position 列的值添加一個附加列。
我想創建一個名為 role 的列,該列只有 3 個值(Chef、Assistant 和 Collegial)
擔任廚師職務的所有人員都將扮演“一號”的角色。任何與合議有關的職位都將具有合議這個角色。任何與助手有關的職位都將扮演助手的角色。
我期待這些輸出
| 姓名 | 位置 | 角色 |
|---|---|---|
| 西蒙 | 廚師 | 一 |
| 大衛 | 助理廚師 | 助手 |
| 菲利普 | 學院廚師 | 合議 |
| 拉斐爾 | 助理廚師 | 助手 |
| 格雷戈里 | 學院廚師 | 合議 |
| 丹妮 | 助理研究員 | 助手 |
| 迭戈 | 院士 | 合議 |
| 帕特里克 | 助理研究員 | 助手 |
| 羅伯特 | 院士 | 合議 |
| 格倫 | 廚師 | 一 |
| 邁克爾 | 助理廚師 | 助手 |
| 威廉 | 學院廚師 | 合議 |
| 卡特 | 助理廚師 | 助手 |
| 安東尼 | 學院廚師 | 合議 |
| 提摩太 | 助理研究員 | 助手 |
| 杰里米 | 院士 | 合議 |
| 布賴恩 | 助理研究員 | 助手 |
| 凱撒 | 院士 | 合議 |
不知道怎么打碼?有人可以幫忙嗎。問題是列中的一些名字也有廚師。
df['Role'] = np.where(df['Position'] == ["Chef"], 'Chef', 'Non Chef')
uj5u.com熱心網友回復:
選項1
Series.str.split與expand設定為 的引數一起使用True。從結果和鏈中選擇第一列Series.replace以將“Chef”替換為“One”。
import pandas as pd
data = {'Name': {0: 'Simon', 1: 'David', 2: 'Philipp', 3: 'Rafael',
4: 'Gregory', 5: 'Dani', 6: 'Diego', 7: 'Patrick',
8: 'Robert', 9: 'Glen', 10: 'Michael', 11: 'William',
12: 'Carter', 13: 'Anthony', 14: 'Timothy', 15: 'Jeremy',
16: 'Brian', 17: 'Ceasar'},
'Position': {0: 'Chef', 1: 'Assistant Chef', 2: 'Collegial Chef',
3: 'Assistant Chef', 4: 'Collegial Chef',
5: 'Assistant Fellow', 6: 'Collegial Fellow',
7: 'Assistant Fellow', 8: 'Collegial Fellow',
9: 'Chef', 10: 'Assistant Chef', 11: 'Collegial Chef',
12: 'Assistant Chef', 13: 'Collegial Chef',
14: 'Assistant Fellow', 15: 'Collegial Fellow',
16: 'Assistant Fellow', 17: 'Collegial Fellow'}}
df = pd.DataFrame(data)
df['Role'] = df.Position.str.split(' ', expand=True)[0].replace('Chef','One')
print(df)
Name Position Role
0 Simon Chef One
1 David Assistant Chef Assistant
2 Philipp Collegial Chef Collegial
3 Rafael Assistant Chef Assistant
4 Gregory Collegial Chef Collegial
5 Dani Assistant Fellow Assistant
6 Diego Collegial Fellow Collegial
7 Patrick Assistant Fellow Assistant
8 Robert Collegial Fellow Collegial
9 Glen Chef One
10 Michael Assistant Chef Assistant
11 William Collegial Chef Collegial
12 Carter Assistant Chef Assistant
13 Anthony Collegial Chef Collegial
14 Timothy Assistant Fellow Assistant
15 Jeremy Collegial Fellow Collegial
16 Brian Assistant Fellow Assistant
17 Ceasar Collegial Fellow Collegial
選項 2
Series.str.extract與正則運算式模式一起使用,并Series.fillna與“一”鏈接。
df['Role'] = df.Position.str.extract(r'(.*)(?=\s\w $)').fillna('One')
# capturing everything followed by a whitespace any word char until end of string
print(df)
# same result
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525439.html
標籤:Python熊猫
