【发布时间】:2018-03-16 12:01:01
【问题描述】:
我正在迭代 Python 数据帧,发现它非常慢。我知道在 Pandas 中您尝试对所有内容进行矢量化,但在这种情况下,我特别需要迭代(或者如果可以进行矢量化,我不清楚该怎么做)。
逻辑很简单:您有两列“A”和“B”以及一个结果列“信号”。如果 A 等于 1,则将 signal 设置为 1。如果 B 等于 1,则将 signal 设置为 0。否则,信号与之前的相同。也就是说,A列是“on”信号,B列是“off”信号,“signal”代表状态。
这是我的代码:
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
这个简单的逻辑让我的计算机在 2000 行包含随机生成的数据的数据帧上运行 46 秒。
【问题讨论】:
标签: python pandas dataframe iteration