热线电话:13121318867

登录
2020-04-27 阅读量: 1436
dataframe数据重组,题目详情见正文。

df数据表:

汇总每个name对应的frequency和CTR,去掉列名CTR,列名用具体的name替代,结果如下(示例为结果的一部分):

参考答案:

np.random.seed(0)
df = pd.DataFrame({"frequency":np.random.randint(1,20,8)
,"CTR":np.random.uniform(0,1,8)
,"name":["0234s3","023dfr","34s231","a34d21","ss034q","34s231","0234s3","023dfr"]})
gp = df.groupby("name").apply(lambda x : x.sort_values("CTR"))
gp.columns = ['frequency', 'ctr', 'name1']
name = gp.pop("name1")
name.value_counts().index
df1 = pd.DataFrame()
for i in name:
df0 = gp.loc[i].reset_index().drop(columns = ["index"])
df0.columns = ["frequency",i]
df1 = pd.concat([df1,df0],axis=1)
df1

结果示例:

0.1237
2
关注作者
收藏
评论(1)

发表评论
yuechuchen
2020-04-27
题目要实现的结果本质上是展现每个name对应的frequency和CTR,并且名字下边对应的就是CTR,不保留CTR字段, 第一步:表中的name字段有重复值,先按照name分组并按照CTR排序,题目没有要求排序,排序的作用将groupby对象转化成DataFrame对象; 第二步,分组后形成双重索引,并且索引名与列名重复,重置列名并删掉与索引重名的字段name,同时将name列提出赋值,从中提取不重复的name; 第三步,把每一个name对应的数据提取成单独的表,运用循环进行拼接并更改列名,完成题目要求
0.0000 0 0 回复