python - 根据另一列中的字符串在列中分配值
问题描述
我有以下代码:
df1=pd.DataFrame(columns=["col1"],data=(["SUPER_280"],["AASD"],
["AASD"],["SUPER_350"],["AASD"],["SUPER_150"],["AASD"],["AASD"]))
结果如下表
col1
0 SUPER_280
1 AASD
2 AASD
3 SUPER_350
4 AASD
5 SUPER_150
6 AASD
7 AASD
实际数据要长得多。
我想制作一个检查 col1 中的字符串的脚本,如果它找到子字符串“SUPER”,则从字符串中取出最后三个字符,并将它们分配到第二列中,直到下一个“SUPER”。我想实现这一点:
col1 col2
0 SUPER_280 280
1 AASD 280
2 AASD 280
3 SUPER_350 350
4 AASD 350
5 SUPER_150 150
6 AASD 150
7 AASD 150
````
Thanks in advance
解决方案
我们可以使用Series.str.contains
来检查单词出现的位置,然后使用Series.ffillSUPER
保留最后 3 个字符Series.where
并填写其余字符:
df1['col2'] = df1['col1'].where(df1['col1'].str.contains('SUPER')).str[-3:].ffill()
我们还可以使用pd.to_numeric
witherrors = 'coerce'
将最后 3 个字符转换为数字,然后用Series.ffill
df1['col2']=pd.to_numeric(df1['col1'].str[-3:],errors='coerce').ffill()
输出
col1 col2
0 SUPER_280 280.0
1 AASD 280.0
2 AASD 280.0
3 SUPER_350 350.0
4 AASD 350.0
5 SUPER_150 150.0
6 AASD 150.0
7 AASD 150.0
推荐阅读
- c# - 如何为剃须刀页面编写扩展方法
- python - 家得宝购买历史下载
- java - 如何在 TextView 中显示 HTML 文本?
- scala - 证明 runtimeClass 满足 Scala 中的 Bound 类型
- docker - Dockerfile:COPY 不起作用(即使他可以找到该文件)
- javascript - 如何开始在 Formio.js 中构建自定义组件?文档在哪里?
- visual-studio - PHP CS Fixer 不会在 Visual Studio Code 中加载 .php-cs 文件
- android - “未解决的参考:数据绑定”
- ruby-on-rails - 如何在 rake 任务中使用 postgres 复制功能?
- wagtail - Wagtail:过滤 PageChooserPanel 中的可用页面