簡體   English   中英

如何通過熊貓DataFrame的多列groupby替換行?

[英]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包含更多列

您需要通過總meanreview_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM