개인 데이터, 개인 ID 번호, 한 해, 그녀의 나이 및 그녀의 이동 상태가 개인 데이터 수준의 큰 데이터 프레임이 있습니다. 나는 unique_pid2
란에 저장된 사람 ID 번호에 groupby
을 사용합니다. 하지만 경우에만,Python 팬더 : groupby 객체의 선택 값을 바꿉니다.
unique_pid2 year age moved
798908 5904_181 1983 0 0
798909 5904_181 1984 0 0
798910 5904_181 1985 0 0
798911 5904_181 1986 0 0
798912 5904_181 1987 2 5
798913 5904_181 1988 0 5
798914 5904_181 1989 0 0
798915 5904_181 1990 0 0
798916 5904_181 1991 0 0
798917 5904_181 1992 0 0
798918 5904_181 1993 0 0
798928 5904_181 2009 24 5
798929 5904_181 2011 26 1
, 나는 moved
및 age
열을 다른 값으로 을 모두 제로에 동일한 값을 입력하려면 :
import pandas as pd
gr_data = pd.read_csv("M:/test.csv").groupby('unique_pid2')
group = gr_data.get_group('5904_181')
print group
는 각 그룹은 다음과 같습니다 이러한 관찰은 age
및 moved
열에 적어도 하나의 0이 아닌 값이있는 다른 관찰간에 "샌드위치"됩니다. 0이 모두 age
및 moved
값이 관측 용
798914: 798918
기입하려는 예
, 아니지만 798908:798911
.., 난 따라 상기 제로 대체 함수를 작성한 . 그러나 798914: 798918
과 같은 "샌드위치"케이스에서이 함수를 호출하고 해당 행에 액세스하는 방법을 모르겠습니다.
지금까지 내가 좋아하는 뭔가를 시도 :
group.loc[(group["age"] == 0) & (group["moved"] == 0), ['age', 'moved']] = someFunction(group)
을하지만이 위 그룹의 첫 번째 네 개의 행과 같은 비 끼워 관찰 채 웁니다. age
및 moved
값을 각 그룹에서 0과 같은 값으로 채우는 함수를 적용하는 방법은 무엇입니까? age
, moved
또는 둘 다에서 0이 아닌 값을 가진 관측치 사이에 끼어있는 관측에 대해서만 어떻게해야합니까?
를 얻을? 그런 다음 논리적 람다를 사용하여 0의 첫 번째 집합이 깨지는 위치를 찾습니다 (이전의 인덱스 = 1 + 인덱스 이전입니까?). 그런 다음 0에서 첫 번째 나누기 이후에 행의 하위 집합에서 ur 함수를 사용하고 다음 0 집합 앞에옵니다. 말이 돼? 더 영리한 방법이있을 수 있습니다. – robertevansanders