gpt4 book ai didi

python - Pandas 查找不连续数据的方法

转载 作者:行者123 更新时间:2023-12-01 02:41:08 34 4
gpt4 key购买 nike

我想找出 pandas 数据框中的哪些列具有不连续数据。我所说的“不连续”是指这些值在再次具有某个值之前从某个值变为零。

[0,0,0,1,2,3,4,5,0,0,0] # continuous
[0,0,0,1,2,0,4,5,0,0,0] # not continuous

我已经设法实现了一些可以执行此操作的代码,使用 for 循环来迭代数据帧的每一列。我在下面制作了一个工作片段来展示我的意思:

import numpy as np
import pandas as pd

def find_discontinuous(series):
switch = 0
for index,val in series.iteritems():
# print(val, end=" ")
if switch==0 and val==0:
# print("still zero")
continue
elif switch==0 and val!=0:
switch = 1
if switch==1 and val==0:
# print("back to zero")
switch = 2
continue
if switch==2 and val!=0:
# print("supposed to be zero")
return "not continuous"
return "continuous"

data = np.array([[0,1,2,3,4,5,0],
[0,1,2,0,4,5,0]])
df = pd.DataFrame(data,columns=list(range(7)),index=list(range(2))).transpose()

for column in df.columns:
series = df.loc[:,column]
res = find_discontinuous(series)
print(column,res)

输出:

0 continuous
1 not continuous

我在某处读到,使用 for 循环迭代 pandas 数据帧可能是不正确的,因为它很慢。 pandas 会以什么方式来实现同样的目标?

最佳答案

您只需检查在第一次远离零的更改和最后一次更改为零之间,中间没有零:

def is_continuous(series):
id_first_true = (series > 0).idxmax()
id_last_true = (series > 0)[::-1].idxmax()
return all((series>0).loc[id_first_true:id_last_true] == True)

关于python - Pandas 查找不连续数据的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45709936/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com