2014-04-12 2 views
0

해당 행의 각각의 부모 행을 반복 :중첩 팬더가 열로 밖으로 dataframe 폭발, 나는 이런 식으로 뭔가 기본적으로 가깝다 팬더 DataFrame이

import json 
import pandas as pd 

df = pd.DataFrame([ 
    {'a': 1, 'b': 2, 'extra': 0}, 
    {'a': 10, 'b': 20, 'extra': 0} 
]) 

df_c1 = pd.io.json.read_json(json.dumps({'row1': {'c1': -1, 'c2': -2}})) 

df_c2 = pd.io.json.read_json(json.dumps({ 
    'row1': {'c1': -10, 'c2': -20}, 
    'row2': {'c1': -100, 'c2': -200}, 
    'row3': {'c1': -1000, 'c2': -2000} 
})) 

df['c'] = [df_c1.T, df_c2.T] 

내가 같은 형식 것 하나 싶어를 이 :

예 :

goal = pd.concat([ 
    pd.DataFrame({'row1': {'a': 1, 'b': 2, 'c1': -1, 'c2': -2}}).T, 
    pd.DataFrame({'row1': {'a': 10, 'b': 20, 'c1': -10, 'c2': -20}}).T, 
    pd.DataFrame({'row2': {'a': 10, 'b': 20, 'c1': -100, 'c2': -200}}).T, 
    pd.DataFrame({'row3': {'a': 10, 'b': 20, 'c1': -1000, 'c2': -2000}}).T 
]) 

In [1]: goal 
Out[1]: 
     a b c1 c2 
row1 1 2 -1 -2 
row1 10 20 -10 -20 
row2 10 20 -100 -200 
row3 10 20 -1000 -2000 

[4 rows x 4 columns] 

몇 가지주의해야 할 :

  • 인덱스 I 만 ['a', 'b'] 포함 할
  • 'extra' 취출 된 c 열의 데이터 프레임에 대응하는 행의 일치
  • 메인 df 2 번째 행 df['c']위한 3 값을 가지며,뿐만 df['c'] = [df_c1.T, df_c2.T] 더 이상 전치 포함 없습니다 : 예, 그 ab 값은 c은 쉽게, 내가 줄 변경할 수 있습니다 경우
  • 의 각 행에 대해 한 번씩 3 번 반복 df['c'] = [df_c1, df_c2]을하지만, 소스 데이터가 JSON 형식으로 표현하기 wn.

현재 해결 방법은 원본 열 'c'의 각 요소를 반복 한 다음 유지하려는 열을 분할하는 동안 부모 행과 결합하는 것입니다. 이 데이터 프레임을 목록에 추가 한 다음 모든 데이터 프레임 목록에서 최종 pd.concat을 수행합니다.

느리고 터무니 없지만 작동합니다. 나는 좀 더 빠르고 우아한 것을 원합니다.

답변

1

모든 요소가 데이터 프레임이라는 열을 왜 만들어야할지 모르겠습니다. 하지만 작업 할 pandas.concatpandas.merge을 사용할 수 있습니다 : 여기

# your setup code here 
df2 = pd.concat(df['c'].tolist(), keys=df.index) 
df3 = pd.merge(df[["a", "b"]], df2, left_index=True, right_on=df2.index.get_level_values(0)) 
df4 = df3.drop("key_0", axis=1).reset_index(level=0, drop=True) 
print df4 

하면 출력 :

 a b c1 c2 
row1 1 2 -1 -2 
row1 10 20 -10 -20 
row2 10 20 -100 -200 
row3 10 20 -1000 -2000 
+0

또한, 이유는 전체 데이터 프레임은 외부에서 읽어하지만 하나의 열을 발생하기 때문에 모두 JSON이되어야합니다. pd.io.json.read_json()을 컬럼에 적용하지만 확장해야하는 DataFrames 컬럼이 있습니다. – Hardeep

관련 문제