Как прочитать данные из нескольких CSV-файлов для user_ids, которые существуют только в первом файле и создать одну сводную таблицу - PullRequest
0 голосов
/ 24 февраля 2019

Вопрос такой: На основании столбца user_id я хочу получить значения столбцов rating и product_id.В одном и том же файле может быть несколько записей с одинаковым идентификатором пользователя и другими файлами.Ниже приведена таблица с некоторыми данными из первого файла.

| product_id  | user_id         | user_name                                    | rating |
|-------------|-----------------|----------------------------------------------|--------|
|  B0009XRZ92 | A2JFZLAUG3YFQ7  |  Entropy Babe "EB"                           | 5      |
|  B0009XRZ92 | A22HGAAO8KZ2N3  |  R.   Metzelar                               | 5      |
|  B000067A8B |  A2NJO6YE954DBH |  Lawrance M. Bernabo                         | 4      |
|  B0009XRZ92 |  A3HE4MYMWK4AER |  Rebecca M. Eddy "Foster Mom and   Untbunny" | 5      |
|  B003A3R3ZY | A9A2PR663ED1V   |  Roger D. Goff                               | 5      |
|  B0009XRZ92 | A2MRZDJF90JC1U  |  Suzanne K. Armstrong "Suzy Q"               | 5      |
|  B0009XRZ92 |  A2YNBDT3170PCR |  C.   O'Hern                                 | 5      |
|  B0009XRZ92 |  A10VJ7BDVCPKEZ |  Carol S. Bottom                             | 5      |
|  B0009XRZ92 |  AAAQO894MG80B  |  Paul J. Michko                              | 5      |
|  B00067BBQE | A9A2PR663ED1V   |  Roger D. Goff                               | 5      |
|  B0009XRZ92 | A31S5QUMFR8NH2  |  Dana L. Jordan "Mom of Twins"               | 5      |
|  B0009XRZ92 |  A2DS24DHXUH0GM |  Gaz    Rev(iewer)                           | 4      |
|  B00006AUMZ |  A2NJO6YE954DBH |  Lawrance M. Bernabo                         | 4      |
|  B0009XRZ92 |  A16FRHL2ZC7EUR |  M.   Claytor                                | 5      |
|  B0009XRZ92 | A3AV8R0A62PP1N  |  MARCUSHELBLINZ "mmmacman"                   | 5      |
|  B0009XRZ92 |  A3QN84C38DE9FU |  Gillian M. Kratzer                          | 5      |
|  B0009XRZ92 |  A36MLTLVQFEQYL |  Yossarian "alienated socialist"             | 5      |
|  B00006AUMD |  A2NJO6YE954DBH |  Lawrance M. Bernabo                         | 4      |

Я хочу сделать следующее:

Чтобы взять один user_id только из первого файла и отобразитьрейтинг и значение столбца product_id для этого пользователя для всех фильмов из всех файлов, и если пользователь не оценил некоторые фильмы, то запись должна отображаться со значением product_id и рейтингом как Nan, и весь процесс должен повторяться для всехтолько для пользователей в первом файле.

Используя pivot_table

import pandas as pd
df = pd.read_csv('LCM1.csv')
df_new=df.pivot_table(index='user_id',columns='product_id',values='rating').rename_axis(None,1)
print(df_new)

The result will be the following:
                     B000067A8B     B00006AUMD     B00006AUMZ     B00067BBQE   \
user_id                                                                         
  A10VJ7BDVCPKEZ             NaN            NaN            NaN            NaN   
  A16FRHL2ZC7EUR             NaN            NaN            NaN            NaN   
  A2DS24DHXUH0GM             NaN            NaN            NaN            NaN   
  A2NJO6YE954DBH             4.0            4.0            4.0            NaN   
  A2YNBDT3170PCR             NaN            NaN            NaN            NaN   
  A36MLTLVQFEQYL             NaN            NaN            NaN            NaN   
  A3HE4MYMWK4AER             NaN            NaN            NaN            NaN   
  A3QN84C38DE9FU             NaN            NaN            NaN            NaN   
  AAAQO894MG80B              NaN            NaN            NaN            NaN   
 A22HGAAO8KZ2N3              NaN            NaN            NaN            NaN   
 A2JFZLAUG3YFQ7              NaN            NaN            NaN            NaN   
 A2MRZDJF90JC1U              NaN            NaN            NaN            NaN   
 A31S5QUMFR8NH2              NaN            NaN            NaN            NaN   
 A3AV8R0A62PP1N              NaN            NaN            NaN            NaN   
 A9A2PR663ED1V               NaN            NaN            NaN            5.0   

                     B0009XRZ92     B003A3R3ZY   
user_id                                          
  A10VJ7BDVCPKEZ             5.0            NaN  
  A16FRHL2ZC7EUR             5.0            NaN  
  A2DS24DHXUH0GM             4.0            NaN  
  A2NJO6YE954DBH             NaN            NaN  
  A2YNBDT3170PCR             5.0            NaN  
  A36MLTLVQFEQYL             5.0            NaN  
  A3HE4MYMWK4AER             5.0            NaN  
  A3QN84C38DE9FU             5.0            NaN  
  AAAQO894MG80B              5.0            NaN  
 A22HGAAO8KZ2N3              5.0            NaN  
 A2JFZLAUG3YFQ7              5.0            NaN  
 A2MRZDJF90JC1U              5.0            NaN  
 A31S5QUMFR8NH2              5.0            NaN  
 A3AV8R0A62PP1N              5.0            NaN  
 A9A2PR663ED1V               NaN            5.0

Но я хочу взять значения user_id из единственного первого файлаи найдите значения product_id и rating во всех файлах по этому user_id.

Надеюсь, у вас возник мой вопрос, и если возникнут проблемы с пониманием, пожалуйста, прокомментируйте ниже.Спасибо

1 Ответ

0 голосов
/ 24 февраля 2019

Проверьте, соответствует ли это вашему требованию.

data1 = pd.read_csv("user.txt", sep="|")
data2 = pd.read_csv("file2.csv")

# Merge on user_id and product_id
masterDf = data1.merge(data2, how='inner', on=["user_id","product_id"])

masterDf['rating'] = masterDf.rating.astype(str).astype(int)
df_new=data.pivot_table(index='user_id',columns='product_id',values='rating').rename_axis(None,1)
df_new

Вывод будет:

enter image description here

...