2017-09-09 2 views
1

제가 DataFrame 함유 세 열 가지고증분 값 (팬더)

  1. 증 분기
  2. 증분
  3. 기타 싶습니다

길게 특정 방식으로 DataFrame. 각 행에서 증분에 따라 여러 행을 추가하고이 행에서 증분 된 항목을 증가 시키지만 "기타"는 방금 복제됩니다.

df = pd.DataFrame([[2,1,3], [5,20,0], ['a','b','c']]).transpose() 
df.columns = ['incrementor', 'incremented', 'other'] 

df 
    incrementor incremented other 
0   2   5  a 
1   1   20  b 
2   3   0  c 

원하는 출력은 다음과 같습니다 : 팬더와 함께 우아하고 효율적으로 할 수있는 방법은

incrementor incremented other 
0   2   5  a 
1   2   6  a 
2   1   20 b 
3   3   0  c 
4   3   1  c 
5   3   2  c 

있습니까

나는 좀 더 명확하게 작은 예제를 만들어? 아니면 루핑을 피할 방법이 없습니까? 그런 다음 repeat

In [1029]: dff = df.loc[df.index.repeat(df.incrementor.astype(int))] 

.loc를 사용 incrementor

+0

좋아요, 단계별로 진행할 수 있습니까? 네가하고 싶은게 뭔지 잘 모르겠다. – MSeifert

답변

1

첫 번째 반복 얻을 행 cumcount

In [1030]: dff.assign(
       incremented=dff.incremented + dff.groupby(level=0).incremented.cumcount() 
      ).reset_index(drop=True) 
Out[1030]: 
    incrementor incremented other 
0   2   5  a 
1   2   6  a 
2   1   20  b 
3   3   0  c 
4   3   1  c 
5   3   2  c 

세부

In [1031]: dff 
Out[1031]: 
    incrementor incremented other 
0   2   5  a 
0   2   5  a 
1   1   20  b 
2   3   0  c 
2   3   0  c 
2   3   0  c 

In [1032]: dff.groupby(level=0).incremented.cumcount() 
Out[1032]: 
0 0 
0 1 
1 0 
2 0 
2 1 
2 2 
dtype: int64 
incremented을 수정