2017-12-18 2 views
2

이 서식을 이상하게 작성하면 사과드립니다. 처음 게시 한 항목이 있습니다. 나는 잘 작동 파이썬에서 다중 색인 데이터 프레임을 만들었습니다팬다 데이터 프레임에 새 행을 추가 할 때의 문제

arrays = [['one','one', 'two', 'two'], 
      ['A','B','A','B']] 
tuples = list(zip(*arrays)) 
mindex = pd.MultiIndex.from_tuples(tuples) 
s = pd.DataFrame(data=np.random.randn(4), index=mindex, columns=(['Values'])) 
s 

이 나는 ​​단순히

s['Values'].loc[('Three', 'A')] = 1 
s['Values'].loc[('Three','B')]= 2 

을 입력하여 새 행을 추가 할 수 있어야한다고 생각하는 것을 제외하고 잘 작동 이것은 오류 메시지를 반환하지 않으며 입력하여 작업했는지 확인할 수 있습니다.

s['Values'].loc[('Three', 'A')] 

1을 제공합니다. 예상대로. 는 그러나, 나는 Jupyter 노트북의 '세'데이터를 볼 수 없습니다 - 단순히, 그것은 단지 나에게 원래 한 개, 두 개를 보여줍니다 다음 & B 행을

s 

을 입력합니다.

s.index 

반환

MultiIndex(levels=[['one', 'two'], ['A', 'B']], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]]) 

사람이 여기에 무슨 일이 일어나고 있는지에 관해서는 저에게 힌트를 줄시겠습니까 :이 새 행이 인덱스되지 않기 때문에 아마? 나중에 인덱스에 추가 할 행을 추가하고 싶습니다. 대신 .append 함수를 사용해야합니까? 조금 성가신 것처럼 보이고 다른 게시물은 위의 .loc 접근법을 사용하여 행을 추가 할 것을 권장합니다.

감사합니다.

답변

0

난 당신이 기능 DataFrame.loc에서 컬럼 (들)을 선택해야합니다 믿습니다 솔루션 열 (Series)에 값을 추가

s.loc[('Three', 'A'), 'Values'] = 1 
s.loc[('Three', 'B'), 'Values'] = 2 
print (s) 
      Values 
one A -0.808372 
     B 0.904552 
two A -0.443619 
     B 1.157234 
Three A 1.000000 
     B 2.000000 

print (s.index) 

MultiIndex(levels=[['one', 'two', 'Three'], ['A', 'B']], 
      labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]]) 

때문에, 그러나에 DataFrame :

s['Values'].loc[('Three', 'A')] = 1 

print (s['Values']) 
one A -0.808372 
     B 0.904552 
two A -0.443619 
     B 1.157234 
Three A 1.000000 
Name: Values, dtype: float64 

print (s) 
     Values 
one A -0.808372 
    B 0.904552 
two A -0.443619 
    B 1.157234