2014-08-28 3 views
2

하나의 정수 및 문자열 레이블 열이있는 DataFrame이 있습니다. 새 레이블을 바꾸는 동안 (합계로) 두 개의 레이블에 가입하려고합니다.DataFrame 인덱스의 두 레이블을 효율적으로 결합하십시오.

import pandas as pd 
pd.DataFrame(data=np.array([1,2,3,4]), index=['a','b','c','d'], columns=['cost']) 

    cost 
a  1 
b  2 
c  3 
d  4 

그리고 나는 그것을 변경하려면 :

내 DataFrame이다

  cost 
a   1 
b   2 
c and d  7 

답변

2
깨끗한 방법이 있는지

는 모르지만이 작품 :

In [157]: 

df.append(pd.DataFrame(index=['c and d'], data={'cost':df.loc[df.cost.isin([3,4])].sum().values})).drop(['c','d']) 

Out[157]: 
     cost 
a   1 
b   2 
c and d  7 

기존 데이터 프레임에 추가 할 데이터 프레임을 만듭니다. 새 색인을 'c와 d'로 설정 한 다음 레이블이 'c'와 'd'인 행을 합친 다음 마지막으로 삭제합니다.

0

합계하려는 색인 레이블의 이름을 지정하고 groupby를 사용할 수 있습니다.

In [35]: df = df.rename(index={'d': 'c'}) 

In [36]: df.groupby(level=0).sum() 
Out[36]: 
    cost 
a  1 
b  2 
c  7 
2

하나의 옵션 df.reindex 사용 :

>>> df.loc['c and d'] = df.loc['c'] + df.loc['d'] 
>>> df.reindex(index=['a', 'b', 'c and d']) 
>>> df 
     cost 
a   1 
b   2 
c and d  7 

[3 rows x 1 columns] 
+1

나는이 분명한 대답이라고 생각, 나의 그것은 하나의 라이너 – EdChum

+1

감사에도 불구하고 난독 조금 - 이것은있을 수있는 그 질문 중 하나입니다 꽤 몇 가지 다른 답변. 가장 적합한 방법은 나머지 데이터가 어떻게 보이고 더 넓은 목표가 무엇인지에 따라 달라질 수 있습니다! –

관련 문제