Python 如何在多列groupby数据帧中按其方式替换行?

Python 如何在多列groupby数据帧中按其方式替换行?,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个数据框,其中包含用户对兴趣点的评分。我需要用同一国家/地区的同一用户审阅者链接替换同一地点属性名称的行审阅者人口统计居住州,并用用户给出的平均评分审阅率替换。所以 csv_df = pd.DataFrame(OrderedDict({'reviewer_link': [1, 2, 3, 4, 1, 2, 3, 4], 'reviewer_demographics_residence_state': [

我有一个数据框,其中包含用户对兴趣点的评分。我需要用同一国家/地区的同一用户审阅者链接替换同一地点属性名称的行审阅者人口统计居住州,并用用户给出的平均评分审阅率替换。所以

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
但是我不能用这些方法替换原始数据框中的行,所以每个国家/用户/PoI有一行,将平均值作为评级

编辑:手工制作的预期输出:

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包含更多的列

您需要按平均列审查率进行聚合,以及所有其他列,这些列需要在输出时首先:


我还需要删除这些行。我认为您给出的一行代码只是替换了这些值,而我需要删除重复的行,并将它们替换为具有平均比率k的相同行,然后需要csv_df.groupby['reviewer_demographics_residence_state'、'reviewer_link'、'attr_name'].mean.reset_index?不-这会取其他列的平均值抱歉,我不明白。
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