2017-12-01 5 views
2

샘플 팬더 Dataframe : 나는 dataframe를 만들기 위해 노력하고파이썬 팬더 : GROUPBY 합계와 연결하여 문자열

ID Name COMMENT1 COMMENT2 NUM 
1 dan hi  hello 1 
1 dan you  friend 2 
3 jon yeah  nope  3 
2 jon dog  cat  .5 
3 jon yes  no  .1 

해당 ID도 NUM을 요약 COMMENT1 및 COMMENT2을 연결 NAME하여 그룹.

ID Name COMMENT1  COMMENT2  NUM 
1 dan hi you  hello friend 3 
3 jon yeah yes  nope no   3.1 
2 jon dog   cat    .5 

내가 이것을 사용하여 시도 :

input_df = input_df.groupby(['ID', 'NAME', 'COMMENT1', 'COMMENT2']).sum().reset_index() 

그러나 그것은 작동하지 않습니다

이것은 내가 무엇을 찾고있다.

내가 이것을 사용하는 경우 :

input_df = input_df.groupby(['ID']).sum().reset_index() 

그것은 NUM 열을 요약 다른 모든 열을 남긴다. 좀 더 많은 작업과 함께

import pandas as pd 

def grouping_Cols_by_Cols(DF, grouping_Columns, num_Columns): 
    # numerical columns can mess us up ... 
    column_Names = DF.columns.tolist() 
    # so, convert all columns' values to strings 
    for column_Name in column_Names: 
     DF[column_Name] = DF[column_Name].map(str) + ' ' 
    DF = DF.groupby(by=grouping_Columns).sum() 

    # NOW, convert the numerical string columns to an expression ... 
    for num_Col in num_Columns: 
     column_Names = DF.columns.tolist() 
     num_Col_i = column_Names.index(num_Col) 
     for i in range(len(DF)): 
      String = DF[num_Col].iloc[i] 
      value = eval(String.rstrip(' ').replace(' ','+')) 
      DF.iat[i,num_Col_i] = value 

    return DF 

############################################################### 
### Operations Section 
############################################################### 

df = pd.read_csv("UnCombinedData.csv") 

grouping_Columns = ['ID','Name'] 
num_Columns = ['NUM'] 
df = grouping_Cols_by_Cols(df,grouping_Columns, num_Columns) 

print df 

, 정의 된 기능 수 :

+0

[팬더 그룹 : 문자열 합집합을 얻는 방법] 가능한 복제본 (https://stackoverflow.com/questions/17841149/pandas-groupby-how-to-get-a-union-of-strings) - 허용 대답은 당신이 원하는 것을 얻기 위해 람다를 사용하는 방법을 보여줍니다 –

답변

1

우리는 다음을 수행 할 수 있습니다, 우리가 CSV 파일로 데이터 예를 변환 한 줄에

df.groupby(['ID','Name'],as_index=False).agg(lambda x : x.sum() if x.dtype=='float64' else ' '.join(x)) 
Out[1510]: 
    ID Name COMMENT1  COMMENT2 NUM 
0 1 dan hi you hello friend 3.0 
1 2 jon  dog   cat 0.5 
2 3 jon yeah yes  nope no 3.1 
+0

이것은 완벽하게 작동합니다! 정말 고맙습니다. – kevintrankt

0

그것을 만들어 보자 자동 감지, 어떤 열에 숫자가 들어 있으며 수치 열 목록에 추가하십시오.

this post에서 발생한 문제와 문제점과 비슷하지만 정확하지 않다고 생각합니다.