2017-11-10 2 views
2

쉼표 구분 기호와 단어 :GROUPBY() 내가 CSV에서 DataFrame이

col1 col2 col3 col4 col5 
0 A  1,5  2,5  3,5 
1 B  C  3,5  4,5 5,5 
2 D  6,5  7,5  8,5 
3 B  E  9,5  10,5 11,5 

사용 : 나는

df1 = df.stack().to_frame() 
m = df1[0].groupby(level=0).apply(lambda x :x.str.isalpha().ne(1).cumsum()) 
df2 = df1.groupby([df1.index.get_level_values(0),m]).sum().unstack().add_prefix('col_') 
df2.reset_index(0).reset_index(drop=True) 
df2.columns = [col[1] for col in df2.columns] 
df2.set_index('col_1', inplace=True) 

을 얻는 :

 col_0  col_1  col_2  col_3 
0   A  1,5  2,5  3,5 
1  BC  3,5  4,5  5,5 
2   D  6,5  7,5  8,5 
3  BE  9,5  10,5  11,5 

나는 싶습니다 얻으세요 :

 col_0  col_1  col_2  col_3 
0   A  1,5  2,5  3,5 
1  B,C  3,5  4,5  5,5 
2   D  6,5  7,5  8,5 
3  B,E  9,5  10,5  11,5 

실제 데이터 A, B, C, D, E는 모두 단어이므로 쉼표 구분 기호를 사용해야합니다. 어떻게 할 수 있습니까?

+0

이 그룹의 뒤에 이론적 근거를 설명? –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ 이것은 이미 명확 해졌습니다 :) –

+3

그래서, 누군가가 대답을하고 당신이 원하는 것을 정확하게 추측했기 때문에, 당신이하고 싶은 것을 설명해서는 안된다는 것을 의미하지는 않습니다. 쉼표로 그룹화되지 않은 인접 요소는 그룹화해야하지만 모든 사람에게 분명하지는 않습니다. StackOverflow의 목표는 미래의 사용자가 배우고 얻을 수있는 명확하고 명확한 Q & A 저장소를 만드는 것입니다. 그것은 당신을 도와주기위한 것이 아닙니다. –

답변

2

당신은 [0]에 의해 열을 선택해야합니다 다음 applyjoin로 :

df2 = (df1[0].groupby([df1.index.get_level_values(0),m]) 
      .apply(','.join) 
      .unstack() 
      .add_prefix('col_') 
      .rename_axis(None, 1)) 
print (df2) 
    col_0 col_1 col_2 col_3 
0  A 1,5 2,5 3,5 
1 B,C 3,5 4,5 5,5 
2  D 6,5 7,5 8,5 
3 B,E 9,5 10,5 11,5 
+0

나는 가까이서 df1 [0]에 대한 필요성을 알지 못했다. 도움을 주셔서 감사합니다 :) –

+0

예, 그것은 가장 어려운 발견했다;) 당신은 환영합니다! – jezrael