2014-12-01 4 views
0

.xlsx 파일을 pandas dataframe으로 구문 분석하고 튜플 목록으로 변환하고자합니다. pandas dataframe에는 두 개의 열이 있습니다.팬더 데이터 프레임 튜플 목록에

튜플 목록에는 product_idtransaction_id과 같이 그룹화되어 있어야합니다. 튜플 목록에 pandas dataframe을 생성 할 때 post을 만들었지 만 transaction_id으로 그룹화 된 코드 결과는`product_id.

페이지 맨 아래에서 원하는 형식의 튜플 목록을 얻으려면 어떻게해야합니까? 예를 들어 (20004, [48815])을주의 - -

import pandas as pd 
import xlrd 
#Import data 
trans = pd.ExcelFile('/Users/Transactions.xlsx') 
#parse xlsx file into dataframe 
transdata = trans.parse('Orders') 
#view dataframe 
#print transdata 

    transaction_id product_id 
0   20001  48165 
1   20001  48162 
2   20001  48166 
3   20004  48815 
4   20005  48165 

transdata = trans.parse('Orders') 
#Create tuple 
trans_set = [tuple(x) for x in subset.values] 
print trans_set 

[(20001, (48165), (20001, 48162), (20001, 48166), (20004, 48815), (20005, 48165)] 

Desired Result: 

[(20001, [48165, 48162, 48166]), (20004, 48815), (20005, 48165)] 

답변

2
trans_set = [(key,list(grp)) for key, grp in 
      transdata.groupby(['transaction_id'])['product_id']] 

In [268]: trans_set 
Out[268]: [(20001, [48165, 48162, 48166]), (20004, [48815]), (20005, [48165])] 

, 원하는 결과보다 조금 다르다하지만 난 그게 더 일관된 생각합니다. 각 튜플의 두 번째 항목은 transaction_id과 연결된 모든 product_ids의 목록입니다. 하나의 요소로만 구성 될 수 있지만 항상 목록입니다.


당신이 csv module를 사용할 수하는 CSV에 trans_set를 작성하려면 :

import csv 
with open('/tmp/data.csv', 'wb') as f: 
    writer = csv.writer(f) 
    for key, grp in trans_set: 
     writer.writerow([key]+grp) 

는 내용으로, 파일, /tmp/data.csv을 산출 :

20001,48165,48162,48166 
20004,48815 
20005,48165 
+1

새로운 질문을하십시오. 현재 가지고있는 DataFrame과 원하는 CSV 형식을 표시하십시오. – unutbu

+0

죄송합니다. @unutbu 저는 새로운 파이썬 사용자입니다. 틀린 데이터 유형을 언급하고있었습니다. 귀하의 결과는 튜플 목록을 제공했는데 .csv로 저장하려면 어떻게해야합니까? –

+1

CSV는 어떤 모습이어야합니까? 예를 들어,'(20, [1, 2, 3])'이''20,1,2,3 "'또는''20 ', [1, 2, 3]' ''또는 다른 것이되어야합니까? – unutbu