[英]How to replace rows by their means in a multiple columns groupby pandas DataFrame?
我有一个数据框,其中包含兴趣点的用户评分。 我需要更换为同一个地方(行attr_name
)由同一用户( reviewer_link
同一国家() reviewer_demographics_residence_state
由平均分数() review_rate
)用户给出。 所以
csv_df = pd.DataFrame(OrderedDict({'reviewer_link': [1, 2, 3, 4, 1, 2, 3, 4],
'reviewer_demographics_residence_state': [
'greece', 'greece', 'greece', 'greece', 'greece',
'italy', 'greece', 'greece'],
'attr_name': ['uffizi', 'uffizi', 'uffizi',
'uffizi', 'uffizi2', 'uffizi',
'uffizi', 'uffizi', ],
'review_rate': [1, 2, 3, 4, 4, 3, 2, 1],
'dummy': [1, 2, 3, 4, 4, 3, 2, 1]
}))
csv_df['review_rate'] = csv_df.groupby(
['reviewer_demographics_residence_state', 'reviewer_link', 'attr_name'])[
'review_rate'].transform('mean')
print(csv_df)
正确计算均值:
reviewer_link reviewer_demographics_residence_state attr_name review_rate dummy
0 1 greece uffizi 1.0 1
1 2 greece uffizi 2.0 2
2 3 greece uffizi 2.5 3
3 4 greece uffizi 2.5 4
4 1 greece uffizi2 4.0 4
5 2 italy uffizi 3.0 3
6 3 greece uffizi 2.5 2
7 4 greece uffizi 2.5 1
但是我不能完全用那些方法替换原始数据框中的行(因此每个国家/用户/兴趣点各占一行,均值作为评分)
编辑:预期的输出(手工制作):
reviewer_demographics_residence_state reviewer_link attr_name review_rate dummy
greece 1 uffizi 1.0 1
greece 1 uffizi2 4.0 2
greece 2 uffizi 2.0 3
greece 3 uffizi 2.5 4
greece 4 uffizi 2.5 4
italy 2 uffizi 3.0 3
因此虚拟列保留第一个值。 当然,csv_df包含更多列
您需要通过总mean
列review_rate
和所有的需要输出的另一列first
:
csv_df = (csv_df.groupby ['reviewer_demographics_residence_state',
'reviewer_link', 'attr_name'])
.agg( {'review_rate': 'mean', 'dummy': 'first'})
.reset_index())
print (csv_df)
reviewer_demographics_residence_state reviewer_link attr_name review_rate \
0 greece 1 uffizi 1.0
1 greece 1 uffizi2 4.0
2 greece 2 uffizi 2.0
3 greece 3 uffizi 2.5
4 greece 4 uffizi 2.5
5 italy 2 uffizi 3.0
dummy
0 1
1 4
2 2
3 3
4 4
5 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.