[英]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.