2017-03-08 3 views
1

저는 현재 하나의 질문에 여러 답변이 합쳐진 팬더 데이터 프레임을 가지고 있습니다. 그래서 코사인 유사성을 수행 할 수 있도록 목록으로 변환하려고합니다. 그림과 같이pandas 데이터 프레임을 다 대일 관계로 정렬 된 목록으로 변환하려면 어떻게해야합니까?

현재 나는 질문이 PARENT_ID = q_id을 통해 답변에 합류하는 dataframe을 가지고 :

print (df) 
    q_id  q_body parent_id a_body 
0  1 question 1   1 answer 1 
1  1 question 1   1 answer 2 
2  1 question 1   1 answer 3 
3  2 question 2   2 answer 1 
4  2 question 2   2 answer 2 

many answers to one question dataframe 내가 찾고 있어요 제품입니다 :

("질문 1", "대답 1", "답이", "답 3")

("질문 2", "대답 1", "답 2")

도움이 될 것입니다. 고맙습니다.

답변

2

난 당신이 필요하다고 생각 groupbyapply과 :

#output is tuple with question value 
df = df.groupby('q_body')['a_body'].apply(lambda x: tuple([x.name] + list(x))) 
print (df) 
q_body 
question 1 (question 1, answer 1, answer 2, answer 3) 
question 2    (question 2, answer 1, answer 2) 
Name: a_body, dtype: object 

#output is list with question value 
df = df.groupby('q_body')['a_body'].apply(lambda x: [x.name] + list(x)) 
print (df) 
q_body 
question 1 [question 1, answer 1, answer 2, answer 3] 
question 2    [question 2, answer 1, answer 2] 
Name: a_body, dtype: object 
#output is list without question value 
df = df.groupby('q_body')['a_body'].apply(list) 
print (df) 
q_body 
question 1 [answer 1, answer 2, answer 3] 
question 2    [answer 1, answer 2] 
Name: a_body, dtype: object 

#grouping by parent_id without question value 
df = df.groupby('parent_id')['a_body'].apply(list) 
print (df) 
parent_id 
1 [answer 1, answer 2, answer 3] 
2    [answer 1, answer 2] 
Name: a_body, dtype: object 

#output is string, values are concanecated by , 
df = df.groupby('parent_id')['a_body'].apply(', '.join) 
print (df) 
parent_id 
1 answer 1, answer 2, answer 3 
2    answer 1, answer 2 
Name: a_body, dtype: object 

그러나 목록으로 필요 출력을 추가하면 tolist :

L = df.groupby('q_body')['a_body'].apply(lambda x: tuple([x.name] + list(x))).tolist() 
print (L) 
[('question 1', 'answer 1', 'answer 2', 'answer 3'), ('question 2', 'answer 1', 'answer 2')] 
+0

감사합니다. 람다를 더 많이 사용하게 될 것입니다. –

+0

다행히 도울 수 있습니다. 좋은 날. – jezrael

2
df = pd.DataFrame([ 
     ['question 1', 'answer 1'], 
     ['question 1', 'answer 2'], 
     ['question 1', 'answer 3'], 
     ['question 2', 'answer 1'], 
     ['question 2', 'answer 2'], 
    ], columns=['q_body', 'a_body']) 

print(df) 

     q_body a_body 
0 question 1 answer 1 
1 question 1 answer 2 
2 question 1 answer 3 
3 question 2 answer 1 
4 question 2 answer 2 

,691,363 당신이

result = df.groupby('q_id').agg({'q_body': lambda x: x.iloc[0], 'a_body': lambda x: ', '.join(x)}) 
result['output'] = result.q_body + ', ' + result.a_body                     

이 원하는 결과와 함께 새 열 출력을 생성합니다 도움이된다면 (210)

apply(list)

df.groupby('q_body').a_body.apply(list) 

q_body 
question 1 [answer 1, answer 2, answer 3] 
question 2    [answer 1, answer 2] 
0

을 참조하십시오.