python - 替换 Pandas DF 中的窗口
问题描述
我想替换数据框中等于给定列表的连续行中的值,例如[0, 1, 0]
必须用零替换。因此,例如,如果这将应用于 A 列,则 B 列将是所需的结果:
A B
0 2 2
1 1 1
2 0 0
3 1 0
4 0 0
5 4 4
这里第 2、3 和 4 行与模板匹配,因此它们的值更改为 0。
在实践中,我想用随着时间的推移测量列来做到这一点。我想用 3 个或更少的连续测量值替换所有部分(因为它们“太短”)。因此,这些测量值是 1、2 或 3 行,两边各填充一行,值为 0。
例如,我已经尝试了很多,df['A'].replace([0, 1, 0], 0)
但这显然用 0 替换了任何 0 或 1。这就是我现在想要的;只有与 [0, 1, 0] 模板匹配的部分才应替换为 0。
我希望有人可以帮助我,并且我已经清楚地解释了我的问题。
解决方案
一种方法是将列转换为字符串,然后捕获并将 '010' 替换为 '000',如下所示:
string_a = df['A'].astype(str).str.cat().replace('010', '000')
然后将其转换回列表并将其分配为 B 列:
df['B'] = list(string_a)
可能有一种更有效的方法来做到这一点。我对python很陌生
问候,
乔治
推荐阅读
- android - Kotlin - 当 editText 获得焦点时,NestedScrollView 卡住了
- javascript - 显示在下拉列表中选择的内容:Bootstrap
- javascript - 如何在使用量角器下载 PDF 文件时设置等待
- c# - 如何初始化 IEnumerable
在 C# 中? - c - 如何反转基于表的 CRC16?
- android - Android:带有一个编辑文本和微调器的 TextInputLayout
- php - PHP:获取数组2并将其存储到新数组
- javascript - 离线渐进式网络应用程序未打开错误消息是无法连接到站点(如本机错误弹出消息)
- ios - 如果框架不存在,Objective-c 在运行时关闭类/代码块
- vue.js - 如何在 Vue.js 中使用 vuelidate 验证 vSelect