加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何基于python中的where函数获取两列值

发布时间:2020-12-17 17:38:03 所属栏目:Python 来源:网络整理
导读:问题是: 基于user_id列,我想获取rating和product_id列的值.可以有多个具有相同user_id的条目.我想获取所有用户的记录,并具有rating和product_id列的值,但是对于用户未评分的电影,该电影应显示为Nan,但仍应检索product_id.以下是提供一些数据的表. | product

问题是:
基于user_id列,我想获取rating和product_id列的值.可以有多个具有相同user_id的条目.我想获取所有用户的记录,并具有rating和product_id列的值,但是对于用户未评分的电影,该电影应显示为Nan,但仍应检索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      |

What I want to do is:

To take one user_id at a time and display the rating and product_id
columns value for that user for all the movies in the table and if the
user didn’t rate some movies then the record should be displayed with
the product_id value and rating as Nan and the whole process should be repeated for all the users.

例如,user_id:A2NJO6YE954DBH的记录将如下所示:

| product_id | rating |
|------------|--------|
| B000067A8B | 4      |
| B00006AUMD | 4      |
| B00006AUMD | 4      |
| B0009XRZ92 | Nan    |
| B003A3R3ZY | Nan    |
| B00067BBQE | Nan    |
|     .      |   .    |
|     .      |   .    |
|     .      |    .   |

我尝试使用Pandas Library为此编写代码,但无济于事.这就是我所做的全部,但未输出我想要的.

import pandas as pd
df =pd.read_csv('out.csv')
unique_users=df.user_id.unique()
for x,y in enumerate(unique_users):
    print(df[['rating','product_id']].where(df.user_id==y))

请帮帮我..谢谢

最佳答案
如果我理解正确,则可以在这里使用pd.pivot_table()

df_new=df.pivot_table(index='user_id',columns='product_id',values='rating').rename_axis(None,1)
print(df_new)


                     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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读