2017-12-05 6 views
0

나는 가장 오래된 것부터 시작하여 날짜별로 테이블을 정렬해야한다는 요구 사항이 있습니다. 총 필드는 namekind 개의 필드를 그룹화하고 합계를 적용하여 만듭니다. 이제 각 행에 대해 동일한 name-kind 그룹화에서 남은 시간을 계산해야합니다.팬더 : 그룹화의 남은 시간 계산

csv로는 다음과 같습니다

date  name kind duration total remaining 
1-1-2017 a 1 10  100 ? should be 90 
2-1-2017 b 1 5  35 ? should be 30 
3-1-2017 a 2 3  50 ? should be 47 
4-1-2017 b 2 1  25 ? should be 24 
5-1-2017 a 1 8  100 ? should be 82 
6-1-2017 b 1 2  35 ? should be 33 
7-1-2017 a 2 3  50 ? should be 44 
8-1-2017 b 2 6  25 ? should be 18 
... 

내 질문 namekind별로 그룹화 DataFrame을하면서 내가 나머지 값을 계산합니까 어떻게? 다음

df['temp'] = df.groupby(['name', 'kind'])['duration'].apply(lambda x: x.shift() + x) 

과 : 내 초기 접근 방식

열을 이동과 같은 서로 시간의 값을 추가하는 것이 었습니다

df['duration'] = df.apply(lambda x: x['total'] - x['temp'], axis=1) 

을하지만 예상대로 작동하지 않았다.

깨끗한 방법이 있습니까? 아니면 iloc, ix, loc을 사용하면 어떻게 될까요?

감사합니다.

df["cumsum"] = df.groupby(['name', 'kind'])["duration"].cumsum() 
df["remaining"] = df["total"] - df["cumsum"] 

어쩌면 인덱스를 재설정주의 것 :

답변

1

당신이 뭔가를 할 수 있습니다.

+0

완벽하게 작동했습니다. 감사합니다. –