2014-03-02 5 views
1

CSV 파일의 특정 열에서 데이터 형식을 가져 와서 새로운 CSV 파일로 결합하는 코드를 만들려고합니다. 팬더를 사용하도록 지시 받았지만 제대로 작동하는지 잘 모르겠습니다. 나는 파이썬에 상당히 익숙하기 때문에 잠재적으로 끔찍한 코드를 준비한다.Python - CSV 파일의 열 결합

Customer_ID,Date,Time,OtherColumns,A,B,C,Cost 
1003,January,2:00,Stuff,1,5,2,519 
1003,January,2:00,Stuff,1,3,2,530 
1003,January,2:00,Stuff,1,3,2,530 
1004,Feb,2:00,Stuff,1,1,0,699 

을이처럼 보이는 새로운 CSV 생성 :

Customer_ID,ABC 
1003,152 
1003,132 
1003,132 
1004,110 

내가 지금까지 가지고하는 것은 :

import csv 
import pandas as pd 

df = pd.read_csv('test.csv', delimiter = ',') 
custID = df.customer_ID 
choiceA = df.A 
choiceB = df.B 
choiceC = df.C 

ofile = open('answer.csv', "wb") 
writer = csv.writer(ofile, delimiter = ',') 
writer.writerow(custID + choiceA + choiceB + choiceC) 

나는 data.csv 사용하려면 불행히도 모든 행은 함께 각 행을 추가 한 다음 한 행으로 합쳐진 각 행의 CSV를 만듭니다. 진정한 최종 목표는 A ~ C 열에서 가장 많이 발생하는 값을 찾고 가장 많이 발생하는 값을 사용하여 각 고객을 동일한 행에 결합하는 것입니다. 나는 끔찍한 설명을한다. 나는 data.csv을 소요하게 뭔가를 원하는 것이 :

Customer_ID,ABC 
1003,132 
1004,110 
+0

"가장 많이 발생하는 값"은 무엇입니까? 같은 수의 ID/ABC 쌍이 있다면 무엇을하고 싶습니까? (예 : 1003, 132 및 1003, 142, 말하십시오.) – DSM

+0

현재 어떤 것이 선택되었는지는 신경 쓰지 않지만 나중에 다른 계산을 기반으로 선택되는 조작 방법을 알고 싶습니다. 아마도 올해 상반기에 판매가 이루어 졌다면 더 낮은 가치를 선택 하겠지만, 올해 하반기라면 더 높은 가치를 선택하게됩니다. 내가 말했듯이 나는 여전히 파이썬을 배우고있어 당신의 도움에 크게 감사 할 것입니다. – SgtSeamonkey

답변

2

당신은 당신의 관심이 열을 요약 할 수 있습니다 (자신의 유형이 문자열 인 경우) :

In [11]: df = pd.read_csv('data.csv', index_col='Customer_ID') 

In [12]: df 
Out[12]: 
       Date Time OtherColumns A B C Cost 
Customer_ID 
1003   January 2:00  Stuff 1 5 2 519 
1003   January 2:00  Stuff 1 3 2 530 
1003   January 2:00  Stuff 1 3 2 530 
1004    Feb 2:00  Stuff 1 1 0 699 

In [13]: res = df[list('ABC')].astype(str).sum(1) # cols = list('ABC') 

In [14]: res 
Out[14]: 
Customer_ID 
1003   152 
1003   132 
1003   132 
1004   110 
dtype: float64 

당신이, csv로 얻을하려면 우선 to_frame (원하는 열 이름 추가)을 사용할 수 있습니다.

In [15]: res.to_frame(name='ABC') # ''.join(cols) 
Out[15]: 
      ABC 
Customer_ID 
1003   152 
1003   132 
1003   132 
1004   110 

In [16]: res.to_frame(name='ABC').to_csv('new.csv') 
+0

놀랍지 만 3 줄 밖에 할 수 없다는 것을 놀랍게 생각했습니다. 정말 고마워요. 코드 작성 방법을 알고 있습니까? 마지막 행의 customer_ID = customer_ID 인 경우 모든 A, 모든 B 및 모든 C의 모드를 찾고 각 고객에 대해 행을 반환합니까? – SgtSeamonkey

+0

무엇이 묻고 있는지, 아마도 한 부분은'res.groupby (level = 0) .last()'입니다. csvs가 아닌 DataFrames의 범위에서 명시 적으로 새로운 질문을하십시오! :) –

+0

내가 더 살펴볼 것입니다, 감사합니다! 그것에 대해 새로운 질문을 게시했지만 응답을 기다리는 동안 res.groupby를 살펴볼 것입니다. – SgtSeamonkey