我的数据分组有问题。
这是我的一块数据集,有一些对医院和牙医的评价,以及这些评价的年月。
受访者ID nr 姓名 分数 年月日 1 6665医院 7,0 2020 1 2 6668牙医 5,5 2020 1 3 6665医院 6,8 2020 2 4 6668牙医 5,7 2019 12
当我使用这个脚本时,
df[['idnumber', 'score', 'respondents' , 'year', 'month',]].groupby('Id nr').agg({'score': 'mean', 'respondents': 'count'}).reset_index()
我得到了我需要的第一个表。
Id nr Score Respondent 6665 6,9 2 6668 5,6 2
但现在我还想在表格中多加入2个变量。 1. ‘名称’这一列。我可以在这里使用什么代码来代替’平均值’或’计数’? 2. 然后我想知道一年中每个月有多少评论。
我怎样修改脚本才能得到下面的表格?
Id nr Score 受访者姓名 2019 – 12 2020 – 1 2020 – 2 3. 6665 6,9 2 医院 0 1 1 6668 5,6 2 牙科医生 1 1 0
解决方案:
我会先把你的两个日期列连起来。
df['date'] = df['year'].astype(str) + "-" + df['month'].astype(str)
然后执行你的pandas groupby操作merges和get_dummies来扩展你的日期列值,然后再进行分组,得到你想要的输出。我假设分数列是要有浮动值的。
df2 = df.groupby(['Id nr','Name']).agg({'Respondent':'count', 'Score':'mean'}).reset_index()
df2 = pd.merge(df2, df[['Id nr', 'Name','date']], on=['Id nr', 'Name'], how='left')
df2 = pd.get_dummies(df2, columns =['date'])
df2 = df2.groupby(['Id nr','Name','Respondent','Score']).agg(sum).reset_index()
输出。
Id nr Name Respondent Score date_2019-12 date_2020-1 date_2020-2
0 6665 Hospital 2 6.9 0 1 1
1 6668 Dentist 2 5.6 1 1 0