替换 Pandas DataFrame 列中超过 n 个连续值

2023-12-22

假设我有以下 DataFramedf

df = pd.DataFrame({"a" : [1,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5], "b" : [3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,7,7], "c" : [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,1,2,2,2,2,2,2,2,2,3,3]})

我希望将任意列(可能有数百列)中连续重复超过 10 次的数字 4 替换为 10 个 4,其余为 5。

例如,12 个连续的 4 将被替换为十个 4 和两个 5。

我如何用 Pandas 实现这一目标?

我想应用 lambda,但我不知道如何回顾足够多的行,并且它必须从末尾开始并向前移动,否则会破坏值的序列。每次查找都必须查看前面的 10 行,看看它们是否都等于 4,如果是,则将当前值设置为 5。

但不知道该怎么做!


您可以使用:

#column a is changed for 2 groups of 4
df = pd.DataFrame({
"a" : [4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5], 
"b" : [3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,7,7], 
"c" : [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,1,2,2,2,2,2,2,2,2,3,3]})

解决方案计数连续 4 并重置 ifNaN由...制作where http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html然后申请boolean mask到原来的df用于更换4 to 5 by mask http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mask.html:

a = df == 4
mask = a.cumsum()-a.cumsum().where(~a).ffill().fillna(0) > 10
df1 = df.mask(mask, 5)
print (df1)
    a  b  c
0   4  3  4
1   4  3  4
2   4  3  4
3   4  3  4
4   4  3  4
5   4  3  4
6   4  3  4
7   4  4  4
8   4  4  4
9   4  4  4
10  5  4  5
11  5  5  5
12  5  5  5
13  5  5  5
14  7  5  5
15  4  5  5
16  4  5  5
17  4  5  5
18  4  5  5
19  4  5  5
20  4  5  5
21  4  5  1
22  4  5  2
23  4  5  2
24  4  5  2
25  5  5  2
26  5  5  2
27  5  5  2
28  5  6  2
29  5  6  2
30  5  7  3
31  5  7  3

为了更好地检查值,可以使用concat:

print (pd.concat([df, df1], axis=1, keys=['orig','new']))
   orig       new      
      a  b  c   a  b  c
0     4  3  4   4  3  4
1     4  3  4   4  3  4
2     4  3  4   4  3  4
3     4  3  4   4  3  4
4     4  3  4   4  3  4
5     4  3  4   4  3  4
6     4  3  4   4  3  4
7     4  4  4   4  4  4
8     4  4  4   4  4  4
9     4  4  4   4  4  4
10    4  4  4   5  4  5
11    4  5  4   5  5  5
12    4  5  4   5  5  5
13    4  5  4   5  5  5
14    7  5  4   7  5  5
15    4  5  4   4  5  5
16    4  5  4   4  5  5
17    4  5  4   4  5  5
18    4  5  5   4  5  5
19    4  5  5   4  5  5
20    4  5  5   4  5  5
21    4  5  1   4  5  1
22    4  5  2   4  5  2
23    4  5  2   4  5  2
24    4  5  2   4  5  2
25    4  5  2   5  5  2
26    4  5  2   5  5  2
27    4  5  2   5  5  2
28    4  6  2   5  6  2
29    5  6  2   5  6  2
30    5  7  3   5  7  3
31    5  7  3   5  7  3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

替换 Pandas DataFrame 列中超过 n 个连续值 的相关文章

随机推荐

  • Hashtable 对象还有用吗?

    System Collections Hashtable 对象是否已过时 随着 C v2 和 v3 中泛型的实现和改进 我已经很长时间没有找到比泛型字典更合适的哈希表了 从字面上看 我不记得上次使用 Hashtable 是什么时候了 只是想
  • 天蓝色 blob 可以包含的最小字节数是多少?

    The 有关 Azure Blob 的 Microsoft 文档 https msdn microsoft com en us library azure ee691964 aspx清楚地解释了您有最大块大小 以及每个块 附加 页面 blo
  • Ajax 加载后单击事件停止工作

    我在使用 Ajax 脚本时遇到一些问题 该脚本禁用了 jQuery 单击事件 以下代码无需 AJAX 事件即可工作 document ready function a showtabinfos click function div info
  • 从 Microsoft.Azure.ServiceBus 迁移到 Azure.Messaging.ServiceBus

    我正在尝试更新此功能以利用Azure Messaging ServiceBus并掉落Microsoft Azure ServiceBus然而 总的来说 我似乎找不到任何资源 有人知道如何使用这个包向主题发送消息吗 旧函数是 public a
  • iOS 10.1 和 Xcode 8 问题

    今天刚刚通过 App Store 安装了 iOS 10 1 非测试版 以及最新 非测试版 版本的 Xcode 但遇到了以下错误 我的 Xcode 版本 欢迎任何和所有建议 还有其他人遇到这个吗 这是我针对 XCode 11 版本的快速临时解
  • 升级 NHibernate 1.2 可以获得什么好处?

    我有一个使用 NHibernate 1 2 的项目 我知道它很旧 但自从我在 NHibernate in Action 工作以来我就一直使用它 它的目标是相同的版本 我一直在想我应该更新我对这个工具以及工具本身的理解 但我想知道版本之间有什
  • 可可中的自定义列表控件

    I am trying to get something like in this screenshot source smokingapples com http smokingapples com wp content uploads
  • 仅单击一次即可追加新元素并将其保存到本地存储 html javascript

    Here is JSFiddle https jsfiddle net zwm360z2 188 我正在尝试将新元素附加到 div 这是有效的 我的问题是 我只想在单击按钮时附加新元素一次 并将其保存到 localStorage 这样我就不
  • Flutter/Dart - 将双精度格式格式化为带有千位分隔符和小数点后数字的字符串

    我试图从双变量实现格式化字符串 其中将包含千位分隔符 并且将始终包含小数点后的 2 位数字 即使它为零 我已经成功地分别实现了它们 但无法将它们组合在一起实现 我希望实现的目标的示例 100 gt 100 00 100 5 gt 100 5
  • Java 按引用传递和编译器优化

    在函数中fermatFactorization a and b被作为参考参数传递 因为我正在使用Long班级 然而在功能上testFermatFactorization 当我经过时a and b to fermatFactorization
  • 如果javascript中验证失败如何停止表单提交

    需要一些帮助 我研究了有关stakeoverflow的解决方案 但由于某种原因 我的带有验证的HTML表单仍然提交 而它不应该提交
  • React-bootstrap 网格布局列呈现为行

    我有以下渲染方法 我希望布局中有两列 但得到的是两行 render return div div
  • 将通过引用传递的值分配给成员变量(在 C++ 中)

    我正在尝试了解 C 中的范围 请考虑以下事项 class C int i public C i 0 C int i i i C const C c i c i cout lt lt C is being copied lt lt i lt
  • Typescript typeof 类和派生类

    我有一个基类 它由几个子类扩展 现在我想将父类的类型作为属性的类型 所有子类型也应该有效 我尝试过 typeof 但不起作用 关于如何将基类的类型作为属性的类型有什么想法吗 我想要引用该类型的原因是我希望能够创建该类的新实例 例如 new
  • before_create 在 Rails 中不起作用

    在 Rails 项目中 我有 3 个控制器和模型 用户 责任和配置文件 我有以下代码 user rb class User lt ActiveRecord Base Include default devise modules Others
  • 在 iPython 笔记本中执行“python setup.py install”

    最近下载了一些软件 需要切换到有python文件的目录 然后运行python setup py install user在终端中 然后通过尝试检查代码是否正确运行from x import y 这适用于我的终端 然而 当我尝试from x
  • 如何开始开发 Internet Explorer 扩展?

    这里有人有开发 IE 扩展的经验吗 可以分享他们的知识吗 这将包括代码示例 优秀示例的链接 流程文档或任何内容 我真的很想这样做 但我遇到了糟糕的文档 糟糕的代码 示例代码 缺乏这些的巨大墙壁 您可以提供的任何帮助 资源将不胜感激 具体来说
  • 在 JavaScript 中返回 HTML 代码?

    我对 javascript 相当陌生 我想知道如何让这段代码 更大的整体的一部分 做我想做的事情 我想将 HTML 添加到短语 购物车中的文章 和 购物车中的文章 这可能吗 非常感谢 我的意思不是样式 粗体或斜体 这就是我希望它返回的内容
  • R S3 类:在覆盖还是附加类属性的类名之间做出决定

    我想创建一个 S3 类 我如何确定哪种设置类属性的方法是正确的 因为它会产生影响 1 覆盖类属性 object lt data frame field1 a field2 2 class object 1 data frame class
  • 替换 Pandas DataFrame 列中超过 n 个连续值

    假设我有以下 DataFramedf df pd DataFrame a 1 2 2 2 2 2 2 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 b 3 3 3 3 3 3 3 4 4