gpt4 book ai didi

python - 如何在引用前几行时遍历 pandas 数据框?

转载 作者:太空宇宙 更新时间:2023-11-04 00:28:37 24 4
gpt4 key购买 nike

我正在遍历 Python 数据框,发现它非常慢。我知道在 Pandas 中你会尝试对所有内容进行矢量化,但在这种情况下我特别需要迭代(或者如果可以进行矢量化,我不清楚该怎么做)。

逻辑很简单:您有两列“A”和“B”以及一个结果列“信号”。如果 A 等于 1,则将信号设置为 1。如果 B 等于 1,则将信号设置为 0。否则,信号为之前的值。换句话说,A 列是“开”信号,B 列是“关”信号,“信号”代表状态。

这是我的代码:

def signals(indata):
numrows = len(indata)
data = pd.DataFrame(index= range(0,numrows))
data['A'] = indata['A']
data['B'] = indata['B']
data['signal'] = 0


for i in range(1,numrows):
if data['A'].iloc[i] == 1:
data['signal'].iloc[i] = 1
elif data['B'].iloc[i] == 1:
data['signal'].iloc[i] = 0
else:
data['signal'].iloc[i] = data['signal'].iloc[i-1]
return data

示例输入/输出:

indata = pd.DataFrame(index = range(0,10))
indata['A'] = [0, 1, 0, 0, 0, 0, 1, 0, 0, 0]
indata['B'] = [1, 0, 0, 0, 1, 0, 0, 0, 1, 1]

signals(indata)

输出:

    A   B   signal
0 0 1 0
1 1 0 1
2 0 0 1
3 0 0 1
4 0 1 0
5 0 0 0
6 1 0 1
7 0 0 1
8 0 1 0
9 0 1 0

这个简单的逻辑需要我的计算机 46 秒才能在包含随机生成数据的 2000 行数据帧上运行。

最佳答案

df['signal'] = df.A.groupby((df.A != df.B).cumsum()).transform('head', 1)

df
A B signal
0 0 1 0
1 1 0 1
2 0 0 1
3 0 0 1
4 0 1 0
5 0 0 0
6 1 0 1
7 0 0 1
8 0 1 0
9 0 1 0

这里的逻辑涉及根据AB 之间的不等式将您的系列分组,并且每个组的值由A 确定.

关于python - 如何在引用前几行时遍历 pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575932/

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