pandas - 根据条件,匹配和替换列值
问题描述
我从df1Series object
中提取了以下内容。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().
解决方案
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
推荐阅读
- linux - 在命令执行之前阻止 Bash 扩展通配符
- sign-in-with-apple - 使用 Apple 登录对我不起作用
- xml - 如何使用 XPath 选择具有特定元素的第一个元素
- python - 如何检测一个键是否被按下但时间固定?
- scala - Scala-根据列值的时间戳计算总时间
- corda - Corda - 分层 CorDapps 中的序列化白名单
- javascript - 如何启动/强制下载网络源(图像)?
- maven - Jenkins 构建失败并出现错误“无法将元数据 commons-io:commons-io:2.5-SNAPSHOT/maven-metadata.xml 从/到 spring-milestones 传输”
- docker - Exporting a docker-compose container
- scala - 如何从Scala中的向量向量中获取元素的索引?