Python 快把熊猫圈进去
我需要更快地在熊猫中做一个循环。这是一个时间序列。 下面的代码运行得很好,但对于大规模df来说速度很慢 它遍历df,在a列的每个第一个值0‘零’(它只需要是序列的第一个零;df有许多0系列)处,计算a列的初始值0‘零’前后一个周期B列值的增量(绝对值)。 然后,它将结果存储在一个名为“Delta”列的新df中 我打赌我能用loc做点什么。但我不知道怎么做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[
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没问题。祝你好运