2017-12-18 13 views
2

このフォーマットを奇妙なものにすると謝罪します。何かを投稿したのは初めてです。私は正常に動作Pythonでマルチインデックスデータフレームを、作成しました:パンダのデータフレームに新しい行を追加する際の問題

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')] 

しかし、私はJupyterノートに「三」データを見ることができない - 単に

s 

を入力すると、それは私だけのオリジナル1、2、& Bの行を示しています。新しい行がインデックスではありませんので、これはおそらくです:

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

s.index 

戻ると誰もがここで何が起こっているのかに関して、私にヒントを与えてくださいことはできますか?私は後でインデックスに追加する行を追加したいと思います。代わりに.append関数を使用する必要がありますか?少し面倒ですが、他の投稿は上記の.locアプローチを使用して行を追加することを推奨しています。

ありがとう!

答えて

0

私はあなたが機能DataFrame.locの列(複数可)を選択必要と考えている:あなたのソリューションは、カラム(Series)にではなく、DataFrameに値を追加するので

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]]) 

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