我的資料框看起來像:
| 學校 | 學期 | 學生 |
|---|---|---|
| 一個 | 2020 年夏季 | 324 |
| 乙 | 春天 21 | 101 |
| 一個 | 夏季/春季 | 201 |
| F | 冬天 | 44 |
| C | 秋季學期 | 98 |
| 乙 | 23 |
我需要添加一個新列 Termcode,它假設 6 個值中的任何一個:夏季、春季、秋季、冬季、多個、無基于 Term 列中的相應值,即:
| 學校 | 學期 | 學生 | 術語代碼 |
|---|---|---|---|
| 一個 | 2020 年夏季 | 324 | 夏天 |
| 乙 | 春天 21 | 101 | 春天 |
| 一個 | 夏季/春季 | 201 | 多 |
| F | 冬天 | 44 | 冬天 |
| C | 秋季學期 | 98 | 落下 |
| 乙 | 23 | 沒有任何 |
uj5u.com熱心網友回復:
您可以使用正則運算式str.extractall并根據匹配數填充值:
terms = ['summer', 'spring', 'fall', 'winter']
regex = r'(' '|'.join(terms) r')'
# '(summer|spring|fall|winter)'
# extract values and set up grouper for next step
g = df['Term'].str.extractall(regex)[0].groupby(level=0)
# get the first match, replace with "multiple" if more than one
df['Termcode'] = g.first().mask(g.nunique().gt(1), 'multiple')
# fill the missing data (i.e. no match) with "none"
df['Termcode'] = df['Termcode'].fillna('none')
輸出:
School Term Students Termcode
0 A summer 2020 324 summer
1 B spring 21 101 spring
2 A summer/spring 201 multiple
3 F wintersem 44 winter
4 C fall trimester 98 fall
5 E NaN 23 none
uj5u.com熱心網友回復:
Series.findall
l = ['summer', 'spring', 'fall', 'winter']
s = df['Term'].str.findall(fr"{'|'.join(l)}")
df['Termcode'] = np.where(s.str.len() > 1, 'multiple', s.str[0])
School Term Students Termcode
0 A summer 2020 324 summer
1 B spring 21 101 spring
2 A summer/spring 201 multiple
3 F wintersem 44 winter
4 C fall trimester 98 fall
5 E NaN 23 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/485478.html
上一篇:如何找出n年的最大百分比變化?
