주어진 행의 숫자 시퀀스에 따라 숫자의 데이터 프레임을 코딩하고 싶습니다. 숫자의 순서 자체는 내가 포착하고 싶은 의미를 가지고 있습니다. 루프를 사용하여이 문제를 해결할 수 있었지만 시간이 많이 걸렸습니다.반복없이 적용을 사용하여 pandas 데이터 프레임에 코드 할당
시작 DF는 :
2017-10-06 2017-10-07 2017-10-08
id
1 1.0 46.0 5.0
2 16.0 1.0 0.0
3 23.0 123.0 0.0
4 1.0 0.0 0.0
5 0.0 0.0 0.0
나는 각 열을 전달하는 기능을 만들었습니다. 이전 열에 대한 지식이 필요하며 코딩 문자열을 할당합니다.
부호화 DF 보이는 같은 :
2017-10-06 2017-10-07 2017-10-08
id
1 active active active
2 active active inactive_1
3 active active inactive_1
4 active inactive_1 inactive_1
5 inactive_1 inactive_1 inactive_3
나는 현재 할당 한 번 각 열을 반복 할 수 있어요
'활성'다음 제로의 수를 지정 (제로가 아닌 값을보기 쉬운) (제로가 발견되면 마지막 값이 '활성'이 아닌,
for i in range(1, len(cols)):
test = cols[i]
prev = cols[i-1]
df[cols[i]] = df.apply(lambda row: assign_active(row[prev], row[test]), axis=1)
중간 DF가 보이는 1의 경우 시작)에서, 이전 값을보고 일을 추가 같은 :
2017-10-06 2017-10-07 2017-10-08
id
1 active active active
2 active active 1
3 active active 1
4 active 1 2
5 1 2 3
다시 반복하고 '활성'이 아닌 항목은 각 열을 반복하는 것과 동일한 방법으로 코드를 적절히 코딩하고 내 함수로 apply를 사용합니다. 이 함수는 특정 값을보고 올바른 코드를 할당합니다 (문자열을 조작하는 것뿐만 아니라 'active_2'도 없음을 알 수 있습니다)
반복하지 않고이 작업을 수행하는 방법을 찾고 싶습니다. 전혀 각 열을 통해 두 번 혼자.
감사합니다.
coldspeed - 설명대로 문제가 해결되었습니다 - 감사합니다! 내 문제가 변경되었으므로 다른 값이 표시된 후에 다시 cumsum을 재설정해야합니다. 예를 들어 [5, '2017-10-07']의 값이 시작 df에서 1이면 출력 df의 맨 아래 행은 [inactive_1, active, inactive_1]이어야합니다. – Matt