2014-12-01 2 views
0

Я проанализировал файл .xlsx на pandas dataframe и желал конвертировать в список кортежей. pandas dataframe имеет две колонки.Pandas dataframe к списку кортежей

Список кортежей требует product_id, сгруппированных по transaction_id. Я видел post при создании pandas dataframe в список кортежей, но результат кода сгруппирован с transaction_id, сгруппированным с `product_id.

Как я могу получить список кортежей в нужном формате в нижней части страницы?

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])] 

Это немного отличается от вашего желаемого результата - обратите внимание на (20004, [48815]), например, - но я думаю, что это более последовательным. Второй элемент в каждом кортеже - это список всех product_ids, которые ассоциированы с transaction_id. Он может состоять только из одного элемента, но он всегда является списком.


Чтобы написать trans_set в CSV, вы можете использовать csv module:

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 Я новый пользователь python, имел в виду неправильный тип данных. Ваш результат дал список кортежей, как мне сохранить как .csv? –

+1

Что должно выглядеть CSV? Например, должны ли '(20, [1, 2, 3])' становиться '" 20,1,2,3 "или' '20, "[1, 2, 3]" 'или что-то еще? – unutbu

Смежные вопросы