我从Series object
df1中提取了以下dataframe
。
df1['K'][25:35]
25 26
26 27
.......
33 UT5
34 XYZ
Name: K, dtype: object
如果字符串值以“ U”开头,我想将“ K”值转换为“ U”。否则,如果它以“ 1”或“ 2”(字符串)开头,我想用“ S”代替。否则,我想保持原样。像这样:
25 S
26 S
.......
33 U
34 XYZ
我尝试了if-else方式,但没有得到结果。我肯定知道分配值的代码不正确。有什么建议吗?
if (df1['K'].str[0].isin(['1','2'])):
df1['K'].str='S'
elif (df1['K'].str[0].isin(['U'])):)
df1['K'].str='U'
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:4)
在同一列中将numpy.select
与default
参数一起使用(如果不匹配,则返回值),第二个掩码可以使用Series.eq
,因为仅比较了一个值:
s = df1['K'].str[0]
m1 = s.isin(['1','2'])
m2 = s.eq('U')
另一个想法是将Series.str.startswith
用于遮罩:
m1 = df1['K'].str.startswith(('1','2'))
m2 = df1['K'].str.startswith('U')
df1['K'] = np.select([m1, m2], ['S','U'], default=df1['K'])
print (df1)
K
25 S
26 S
33 U
34 XYZ