2016-07-14 8 views
9

다음과 같은 DataFrame이 있습니다. "데이터"열을 여러 열로 나눌 수 있는지 궁금합니다. 이에서, 예를 들어,이에팬더, DataFrame : 한 열을 여러 열로 나누기

 
ID  Date  data 
6  21/05/2016 A: 7, B: 8, C: 5, D: 5, A: 8 
6  21/01/2014 B: 5, C: 5, D: 7 
6  02/04/2013 A: 4, D:7 
7  05/06/2014 C: 25 
7  12/08/2014 D: 20 
8  18/04/2012 A: 2, B: 3, C: 3, E: 5, B: 4 
8  21/03/2012 F: 6, B: 4, F: 5, D: 6, B: 4 

는 :

 
ID  Date  data       A B C D E F 
6  21/05/2016 A: 7, B: 8, C: 5, D: 5, A: 8 15 8 5 5 0 0 
6  21/01/2014 B: 5, C: 5, D: 7    0 5 5 7 0 0  
6  02/04/2013 B: 4, D: 7, B: 6    0 10 0 7 0 0 
7  05/06/2014 C: 25       0 0 25 0 0 0 
7  12/08/2014 D: 20       0 0 0 20 0 0 
8  18/04/2012 A: 2, B: 3, C: 3, E: 5, B: 4 2 7 3 0 5 0 
8  21/03/2012 F: 6, B: 4, F: 5, D: 6, B: 4 0 8 0 6 0 11 

나는이 pandas split string into columns을 시도하고,이 pandas: How do I split text in a column into multiple rows? 있지만 내 경우에는 작동하지 않는했다.

EDIT 복잡도의 비트는 "데이터"열이 "A"이 반복되고, 따라서이 값은 "A"열 아래에 요약되어있다 (제 1 행, 예를 들면 중복 값을 가지고있다

제 2 표 참조).

답변

6

는 사전과 키를 기반으로 집계 값에 문자열을 변환 할 수있는 기능입니다; 변환 후에는 pd.Series 방법으로 결과를 얻을 수 쉬울 것이다 :

def str_to_dict(str1): 
    import re 
    from collections import defaultdict 
    d = defaultdict(int) 
    for k, v in zip(re.findall('[A-Z]', str1), re.findall('\d+', str1)): 
     d[k] += int(v) 
    return d 

pd.concat([df, df['dictionary'].apply(str_to_dict).apply(pd.Series).fillna(0).astype(int)], axis=1) 

enter image description here

3
df = pd.DataFrame([ 
     [6, "a: 1, b: 2"], 
     [6, "a: 1, b: 2"], 
     [6, "a: 1, b: 2"], 
     [6, "a: 1, b: 2"], 
    ], columns=['ID', 'dictionary']) 

def str2dict(s): 
    split = s.strip().split(',') 
    d = {} 
    for pair in split: 
     k, v = [_.strip() for _ in pair.split(':')] 
     d[k] = v 
    return d 

df.dictionary.apply(str2dict).apply(pd.Series) 

enter image description here

또는 :

pd.concat([df, df.dictionary.apply(str2dict).apply(pd.Series)], axis=1) 
다음

enter image description here

+0

이는 당신에게 시리즈를 제공하고 여러 열로 분할하지 않습니다. – user1124825

+0

@ user1124825 답변을 편집하여 문자열 파서를 포함 시켰습니다. 당신의 원래 질문은''dictionary ''라는 칼럼이 사전들의 칼럼이라는 것을 언급했다. 나는 그것이 사실이라고 생각했다. 파서를 적용함으로써, 나의 동일한 대답이 여전히 성립한다. – piRSquared