python pandas数据透视的问题
本帖最后由 cqwcns 于 2020-12-11 11:30 编辑数据表结果大概如下,我希望实现统计出装维个人的用户属性情况(计数,分两列呈现普通用户数和高端用户数)、拜访次数和收益(求和),希望透视后的效果如图。
不知道代码要怎么写?求指教,谢谢。
import numpy as np
import pandas as pd
df = pd.DataFrame({"区域": ["茂南", "茂南", "茂南", "茂南", "信宜", "茂南", "茂南", "高州", "高州"],
"网格": ["油城南", "西城", "西城", "油城南", "信城南", "油城南", "西城", "高城北", "高城北"],
"装维": ["张学友", "刘德华", "刘德华", "郭富城", "古天乐", "张学友", "周星驰", "张家辉", "张家辉"],
"用户属性": ["普通", "普通", "高端", "普通", "高端", "高端", "普通", "高端", "普通"],
"拜访次数": ,
"收益": })
print(df)
df2 = pd.pivot_table(df, values=['用户属性', '收益'], index=['装维个人'], aggfunc=np.sum)
print(df2)
pivot_table研究不深,而且直觉认为可能实现不了。建议用分组-聚合的方式 做不了,除非数据重排。超出了pandas功能范畴。
http://ww2.sinaimg.cn/mw690/6941baebgw1eqeo8vewv5j20mm0fr762.jpg
典型的pandas透视表是这样的 本帖最后由 rsnodame 于 2020-12-11 12:38 编辑
gg = df.groupby('装维')
# 普通与高端的计数
df1 = gg['用户属性'].apply(lambda x:x.value_counts()).unstack(1)
# 分组求和
df2 = gg[['拜访次数','收益']].sum() # 需要两组中括号,详见https://github.com/pandas-dev/pandas/issues/23566
# 合并
dfr = df1.join(df2,how='outer') rsnodame 发表于 2020-12-11 12:24
gg = df.groupby('装维')
# 普通与高端的计数
df1 = gg['用户属性'].apply(lam ...
大佬牛逼,把计数和求和也弄上去吧 JuncoJet 发表于 2020-12-11 13:10
大佬牛逼,把计数和求和也弄上去吧
df1是计数,df2是求和,不是都写出来了么{:301_1009:} rsnodame 发表于 2020-12-11 13:18
df1是计数,df2是求和,不是都写出来了么
原来楼主是这个意思,底下是解释上面的数据类型 JuncoJet 发表于 2020-12-11 13:20
原来楼主是这个意思,底下是解释上面的数据类型
自定义一个函数然后groupby - apply也无不可。不过感觉分开来算然后合并更方便点
页:
[1]