2017-12-18 14 views
0

私は次のような状況に陥っています: 'a'と 'b'キーを持つ他の複数の辞書を含む辞書として作成された '改訂'列のデータフレームがあります。 リビジョンはキー列idに属します。私がしようとしていたのは、dict形式を取り除くことです。だから私は、データフレームの他の列と一緒に、すべてのサブ辞書の値を列挙したかったのです。pd.concatを使用した後にデータフレーム列が失われる

id column2 (dict_column)        column3 
0 {{'a': 91125, 'b': 233}{'a': 955, 'b': 267}}  Marc 
1 {{'a': 91875, 'b': 455}{'a': 115, 'b': 267}}  Robert 
2 {{'a': 91955, 'b': 354}{'a': 255, 'b': 267}}  George 
3 {{'a': 91565, 'b': 987}}       Peter 
4 {{'a': 95925, 'b': 896}}       Hans 

私の目標:今

id a  b  column3 
0 91125 233  Marc 
0 955 267  Marc 
1 91875 455  Robert 
1 115 267  Robert 
2 91955 354  George 
2 255 267  George 
3 91565 987  Peter 
4 95925 896  Hans 

、私はAの検索を新しい列は、( 'a' と 'b')

初期データフレームのキーの名前を採用すべきですそれを行う方法とは、pd.concatを使用して素敵なsolutionを見つけました。

df = pd.concat([pd.DataFrame(x) for x in df['column2']],keys=df['id']).reset_index(level=1, drop=True).reset_index() 

今私の問題はその「列3」失われた取得し、それには、次のデータフレームを返します:

id a  b 
0 91125 233  
0 955 267  
1 91875 455  
1 115 267  
2 91955 354  
2 255 267  
3 91565 987  
4 95925 896   ´ 

は、あなたたちは私が間違って何をすべきかのアイデアを持っていますか?進める

多くのおかげで、

Greetz

答えて

0

あなたはデータフレームにシリーズCOLUMN2を拡大して、DFにそのデータフレームを再割り当てされています。 pd.concatの内部で実行されるすべてには、column3は含まれません。したがって、この結果をdfに代入すると、column3が失われます。私がこれを解決する方法を知っている最善の方法は、column2の展開を新しい変数に代入し、次にmergeをdfに戻すことです。

s = pd.concat([pd.DataFrame(x) for x in df['column2']],keys=df['id']).reset_index(level=1, drop=True).reset_index() 
new_df = s.merge(df[['id','column3']],on='id') 
関連する問題