Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快把熊猫圈进去_Python_Pandas - Fatal编程技术网

Python 快把熊猫圈进去

Python 快把熊猫圈进去,python,pandas,Python,Pandas,我需要更快地在熊猫中做一个循环。这是一个时间序列。 下面的代码运行得很好,但对于大规模df来说速度很慢 它遍历df,在a列的每个第一个值0‘零’(它只需要是序列的第一个零;df有许多0系列)处,计算a列的初始值0‘零’前后一个周期B列值的增量(绝对值)。 然后,它将结果存储在一个名为“Delta”列的新df中 我打赌我能用loc做点什么。但我不知道怎么做 deltas=[] indexes = [] i=0 for idx, row in df.iterrows(): if df.A[

我需要更快地在熊猫中做一个循环。这是一个时间序列。 下面的代码运行得很好,但对于大规模df来说速度很慢

它遍历df,在a列的每个第一个值0‘零’(它只需要是序列的第一个零;df有许多0系列)处,计算a列的初始值0‘零’前后一个周期B列值的增量(绝对值)。 然后,它将结果存储在一个名为“Delta”列的新df中

我打赌我能用loc做点什么。但我不知道怎么做

deltas=[]
indexes = []
i=0
for idx, row in df.iterrows():

    if df.A[i] == 0 and df.A[i-1] !=0:
    
        deltas.append(abs(df.B.shift(periods=1)[i] - df.B.shift(periods=-1)[i]))
        indexes.append(idx)
        
    i+=1
s_delta = pd.Series(deltas, name="Delta", index = indexes)
df_delta = s_delta.to_frame()

使用assign(分配)功能处理串联而非每行的df:

df = df.assign(
    n = lambda x: x.B.shift(1),
    p = lambda x: x.B.shift(-1),
    s_delta= np.abs(x.n-x.p)
)

然后你可以使用np修改它。在哪里你可以编辑你的问题并把样本(小)输入和预期输出放在那里吗?没有样本数据很难判断,但类似的东西应该可以工作(如果我的逻辑正确):
df['Delta']=np.where((df['A']=0)和(df['A'].shift()!=0),abs(df['B'].shift(1)-df['B'].shift(-1)),np.nan)
@AndrejKesely结果是这样的数字12.936795711517334、13.50596663360596。他们中的许多人。与df中的零系列一样多。它们是增量值。结果完全正确。我需要使用pandas I中的一些内置功能使循环更快guess@ganesa75你能把样本数据(cca.8-10行)放到你的问题中吗?@ganesa75没问题。祝你好运