groupby 结果到自定义数据框
Posted
技术标签:
【中文标题】groupby 结果到自定义数据框【英文标题】:groupby results to custom dataframe 【发布时间】:2021-01-12 04:41:17 【问题描述】:我有以下数据样本。我想使用d=df.groupby(['id2','type','id1']).sum()['clicks']
或d=df.groupby(['id2','type','id1']).agg('clicks':'sum'
进行分组。 id2 是用户 ID。有很多种类型,每种都有不同的 id。我想使用 groupby 的结果并制作一个数据透视表。新表索引为 id2,列将是列类型的值 I。这些值将是每种类型的点击次数之和。
df = pd.DataFrame("id1": [493,303,814,810,303,930,821,493,303,814],
"module": ["DDD", "DDD", "AAA", "BBB", "DDD","CCC", "CCC", "DDD", "AAA","DDD"],
"present": ["13J", "14J", "13J", "14B", "13B","13J", "14J", "13J", "14B","13B"],
"id2": [516, 516, 516, 388, 388,388, 388, 388,695,386],
"type": ["t1", "t2", "t3", "t3","t2", "t4", "t3", "t1","t2","t3"],
"clicks": [3,6,2,1,3,1,2,2,5,1])
我试过了
pivoted_t=d.pivot(index='id2',columns='type')
,但我收到此错误 ['id2', 'type'] 均不在列中
【问题讨论】:
【参考方案1】:您可以从原始数据中pivot_table
:
df.pivot_table(index=['id2','id1'], columns='type', values='clicks', aggfunc='sum')
输出:
type t1 t2 t3 t4
id2 id1
386 814 NaN NaN 1.0 NaN
388 303 NaN 3.0 NaN NaN
493 2.0 NaN NaN NaN
810 NaN NaN 1.0 NaN
821 NaN NaN 2.0 NaN
930 NaN NaN NaN 1.0
516 303 NaN 6.0 NaN NaN
493 3.0 NaN NaN NaN
814 NaN NaN 2.0 NaN
695 303 NaN 5.0 NaN NaN
或者从你的 groupby 结果中,做一个 unstack:
d['clicks'].unstack('type')
这也为您提供相同的输出。
【讨论】:
以上是关于groupby 结果到自定义数据框的主要内容,如果未能解决你的问题,请参考以下文章