我有一个关于如何在Python中快速填充序列的问题(Pandas)。我有一个如下的数据集(真正的数据集更长),
| 时间|编号|
| - -|- -|
| 时间0|不适用|
| t1层|不适用|
| 第二次|不适用|
| t3层|第0页|
| t4级|不适用|
| t5级|不适用|
| t6级|不适用|
| 七号线|不适用|
| 八度|第0页|
| 九号线|不适用|
我的要求是在非空行的前后N行加上数字,顺序范围为range(-N,N+1),数据集中任意两个非空行之间的间隔大于C(常数),我们的N就会未来C,所以暂时不需要考虑覆盖问题,假设N=2,我需要的结果如下:
| 时间|编号|
| - -|- -|
| 时间0|不适用|
| t1层|-2个|
| 第二次|-1个|
| t3层|第0页|
| t4级|一个|
| t5级|2个|
| t6级|-2个|
| 七号线|-1个|
| 八度|第0页|
| 九号线|一个|
目前我能想到的唯一办法就是用循环,但是效率很低,Pandas有没有这样的方法可以快速做到?
3条答案
按热度按时间vx6bjr1n1#
在你的问题中还有一些未知数,比如如果区间重叠会发生什么。这里我将考虑下一个区间覆盖前一个区间(你可以通过改变代码来做相反的事情,见第二部分)。
使用
rolling
、groupby.cumcount
和mask
:输出:
第一组优先级
输出:
q8l4jmvw2#
输出功率
zxlwwiss3#
我们能多了解一些情况吗?
我注意到在你的最终结果
t0
仍然是NA,这是为什么?你仍然想保留一些值为NaN吗?在这个例子中,
t3
最初是0
,而在结果中它仍然是0
,这在序列中是有意义的。而不是用0
,而是用另一个像5
的值?你是想保留5
,还是从序列中的那个位置赋值0
?如果你保留了5
,那么t4
会是0
吗?以下是一些解决方案,以防万一:
使用序列填充NaN值(跳过填充的值)
会给予你这个:
用序列填充整列(覆盖填充的值)
将为您提供:
使用序列填充NAN值(跳过填充值的序列)
将为您提供:
(请注意,
1
应该已经进入t3
插槽,但由于那里已经有一个0
,所以它只是跳过了它)