2017-03-17 4 views
1

다음 데이터 프레임을 가지고 있습니다. csv에서 팬더로 읽습니다.인덱스로 팬더 데이터 프레임의 두 열에 중복 행 합계

  Fruit Apple Pear 
Date     
2016-03-30 Pear   1 
2016-04-14 Pear   1 
2016-04-14 Pear   1 
2016-05-09 Apple 1 
2016-05-18 Apple 1 
2016-06-24 Pear   1 
2016-06-27 Apple 1 
2016-06-27 Pear   1 
2016-06-28 Apple 1 
2016-06-28 Apple 1 
2016-07-05 Pear   1 

나는 이렇게 보길 원합니다. 중복 행을 합친 다음 중복 행을 삭제합니다. 이 시점에서 과일 열의 값은 중요하지 않습니다. 나는 그 칼럼을 나중에 놓을거야.

  Fruit Apple Pear 
Date     
2016-03-30 Pear   1 
2016-04-14 Pear   2 
2016-05-09 Apple 1 
2016-05-18 Apple 1 
2016-06-24 Pear   1 
2016-06-27 Apple 1  1 
2016-06-28 Apple 2 
2016-06-28 Apple 1 
2016-07-05 Pear   1 

나는 groupby를 사용하려고했지만 Apple/Pear 열을 1로 채웠다. 나는 for 루프를 시도했는데 다음 날짜 인덱스가 현재 날짜 인덱스와 같으면 Apple/Pear 열에 + = 1이됩니다. 열의 유형 및 열 유형 변경 시도가 실패했기 때문에 실패했습니다. 이 머리에 맞서 머리를 치면 얻을 수 없어요.

내가 옳다 할 수있는 한 가지는 당신이 인덱스로 groupby 필요 df = df.reset_index().drop_duplicates('Date',keep='last').set_index('Date')

+0

읽기 [this] (http://stackoverflow.com/quest ion/20109391/how-to-make-good-reproducible-pandas-examples) 좋은 팬더 질문을하는 법에 도움이 될 것입니다. 게시 된 프레임은 분석하기가 다소 어려우며 2016-03-30/Apple의 값이 0인지 또는 NaN인지와 어떤 이유로 든 또는 빈 문자열 등이 표시되지 않았는지 여부는 명확하지 않습니다. – DSM

답변

1

IIUC와 중복 드롭 - level=0 및 집계 sum :

df = df.groupby(level=0).sum() 
print (df) 
      Apple Pear 
Date     
2016-03-30 NaN 1.0 
2016-04-14 NaN 2.0 
2016-05-09 1.0 NaN 
2016-05-18 1.0 NaN 
2016-06-24 NaN 1.0 
2016-06-27 1.0 1.0 
2016-06-28 2.0 NaN 
2016-07-05 NaN 1.0 

이 필요 cumsumNoobie 언급 한 경우, 감사합니다 :

df = df.groupby(level=0).cumsum() 
print (df) 
      Apple Pear 
Date     
2016-03-30 NaN 1.0 
2016-04-14 NaN 1.0 
2016-04-14 NaN 2.0 
2016-05-09 1.0 NaN 
2016-05-18 1.0 NaN 
2016-06-24 NaN 1.0 
2016-06-27 1.0 NaN 
2016-06-27 NaN 1.0 
2016-06-28 1.0 NaN 
2016-06-28 2.0 NaN 
2016-07-05 NaN 1.0 
+0

'df = df.groupby (level = 0) .sum(). min() .max(). cumsum()'역시 잘 작동합니다. –

+0

@Noobie - 제안 해 주셔서 감사합니다.) .cumsum(). reset_index(). drop_duplicates ('Date', keep = 'last')'? – jezrael

+0

예 thats more efficient –

관련 문제