Python 如何检查行值并使用它们更新已存在的列
我想更新一列(Python 如何检查行值并使用它们更新已存在的列,python,pandas,Python,Pandas,我想更新一列(名称),如下所示: 如果Names中单词的最后一个字符以a结尾,并且不是pizza,则分配c 如果Names中单词的最后一个字符以o或i结尾,或者是pizza,则分配m 要检查的列是 Names choriocarcinoma medulloblastoma phenylketonuria counterguerilla lymphogranuloma archipelago braggadocio chiaroscuro decrescendo violoncello ac
名称
),如下所示:
- 如果
中单词的最后一个字符以Names
结尾,并且不是a
,则分配pizza
李>c
- 如果
中单词的最后一个字符以Names
或o
结尾,或者是i
,则分配pizza
m
Names
choriocarcinoma
medulloblastoma
phenylketonuria
counterguerilla
lymphogranuloma
archipelago
braggadocio
chiaroscuro
decrescendo
violoncello
accelerando
afficionado
tachyarrhythmia
teratocarcinoma
caudillismo
cinquecento
countermemo
oligodendroglia
pleuropneumonia
pizza
要提取我所做的最后一个字符:
df['Names'] = [x.strip()[-1] for x in df['Names']]
要检查并分配新值,我执行了以下操作:
if df['Names'] == 'a':
df['Names'] = 'c'
elif df['Names'] in ('o','i','pizza'):
df['Names'] = 'm'
else:
df['Names'] = 'Other'
但它不起作用。也
def applyFunc(s):
if s == 'a' and s != 'pizza':
return 'c'
elif s in ('o','i', 'pizza'):
return 'm'
return 'other'
不起作用
你能告诉我错误在哪里吗?IIUC,以及
输出
Names new
0 choriocarcinoma c
1 medulloblastoma c
2 phenylketonuria c
3 counterguerilla c
4 lymphogranuloma c
5 archipelago m
6 braggadocio m
7 chiaroscuro m
8 decrescendo m
9 violoncello m
10 accelerando m
11 afficionado m
12 tachyarrhythmia c
13 teratocarcinoma c
14 caudillismo m
15 cinquecento m
16 countermemo m
17 oligodendroglia c
18 pleuropneumonia c
19 pizza m
通过组合
str.endswith()
、与
和|
进行布尔选择,以进行备选选择。使用嵌套的np.where
。谨慎<代码>np。选择始终是更好的选项
import numpy as np
a= (df.Names.str.endswith('a'))&(df.Names!='pizza')
b= (df.Names.str.endswith('o'))|(df.Names.str.endswith('i'))|(df.Names=='pizza')
df['N']=np.where(a, 'c', np.where(b,'m',df.Names))
import numpy as np
a= (df.Names.str.endswith('a'))&(df.Names!='pizza')
b= (df.Names.str.endswith('o'))|(df.Names.str.endswith('i'))|(df.Names=='pizza')
df['N']=np.where(a, 'c', np.where(b,'m',df.Names))