我有以下数据框。
user movie rating
0 1 1 3
1 1 2 4
2 2 1 2
3 2 2 5
4 3 1 3
我想要的输出是
movie 1 2 3
user
1 3 4 0
2 2 5 0
3 3 0 0
如果用户未对电影评分,则需要在相应的输出列中输入“ 0”,否则应显示评分值。
注意:我能够使用pivot_table实现此目的,但是要注意的是我的数据集包含超过100000列,因此我得到“ Unstacked DataFrame太大,导致int32溢出”。我正在尝试使用groupby来绕过此错误。
我正在尝试以下操作,但其中不包括数据框“值”列中的值。
df.groupby(['user', 'movie']).size().unstack('movie', fill_value=0)
答案 0 :(得分:1)
尝试使用crosstab
:
pd.crosstab(df.user, df.movie, values = df.rating, aggfunc = 'first').fillna(0)
# movie 1 2
# user
# 1 3.0 4.0
# 2 2.0 5.0
# 3 3.0 0.0
要获取整数值,只需使用.astype(int)
,如下所示:
pd.crosstab(df.user, df.movie, values = df.rating, aggfunc = 'first').fillna(0).astype(int)
# movie 1 2
# user
# 1 3 4
# 2 2 5
# 3 3 0
答案 1 :(得分:0)
我不确定您为什么会期待电影3
,因为原始数据样本中不存在电影movie_ratings.set_index(['user', 'movie']).unstack('movie', fill_value=0)
,但对于您而言,这会起作用:
import React, { Component } from 'react'
import ReactPDF, { Page, Text, View, Document, StyleSheet , Font, Image,} from '@react-pdf/renderer';
import pic from "../pics/pic.jpeg"
// Create styles
const styles = StyleSheet.create({
page: {
flexDirection: 'row',
backgroundColor: '#fff',
width:"100%",
orientation:"portrait"
},
image: {
width: '100%',
height:"100%",
padding: 10,
backgroundColor: 'white',
},
});
// Create Document Component
export default class ImageToPDF extends Component {
render() {
return (
<Document >
<Page object-fit="fill" style={styles.page} size="A4">
<View object-fit="fill" style={styles.image}>
<Image object-fit="fill" style={{ padding:"0, 0, 0, 0", margin:"33%, 2rem, 2rem, 2rem",
transform: 'rotate(90deg)'}} src={pic} alt="images" />
</View>
</Page>
</Document>
)
}
}