필자는 파이썬 데이터 프레임을 반복 처리하고 매우 느리다는 것을 알았습니다. 나는 판다 스에서 모든 것을 벡터화하려고 시도하지만,이 경우 반복적으로 반복 할 필요가 있음을 이해합니다 (또는 벡터화가 가능하면 어떻게해야하는지 명확하지 않습니다).이전 행을 참조하면서 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
이 간단한 로직은 dataframe에서 실행 46초 컴퓨터를 얻어 무작위로 생성 된 데이터가있는 2000 행
팬더가이 논리 게이트 연산을 처리하는 방법을 관찰하는 것은 흥미 롭습니다. 나는이 알고리즘이 작동한다는 사실을 아직도 감추고 있습니다. –
이것은 정말 깔끔한 것입니다. 조금 더 설명하면 될까요? – DJK
이것은 흥미로운 해결책이지만, 더 복잡한 반복을 위해 그 논리를 독자적으로 생각해 낼 수는 없습니다. 정말이 유형의 문제에 대한 처리 시간을 줄이기 위해 간단하고 쉽게 복제 할 수있는 방법을 찾고 있습니다. – karakumy