use*_*890 4 python aggregate pandas
这是我的问题:
df = pd.DataFrame({'A': ['one', 'one', 'two', 'two', 'one'] ,
'B': ['Ar', 'Br', 'Cr', 'Ar','Ar'] ,
'C': [1, 0, 0, 1,0 ]})
Run Code Online (Sandbox Code Playgroud)
我想生成类似pd.crosstab
函数输出的东西,但是列和行的交集上的值应该来自第三列的聚合:
Ar, Br, Cr
one 0.5 0 0
two 1 0 0
Run Code Online (Sandbox Code Playgroud)
例如,在'C'列中有两个'one'和'Ar'对应值的情况是1,0我们将列'C'(0 + 1)中的值相加并除以'C'列中的值的数量',所以我们得到(0 + 1)/ 2 = 0.5.每当组合不存在时,我们(如'Cr'和'one')我们将它设置为零.有什么想法吗?
你可以使用pivot_table()方法,它使用aggfunc='mean'
per-default:
In [46]: df.pivot_table(index='A', columns='B', values='C', fill_value=0)
Out[46]:
B Ar Br Cr
A
one 0.5 0 0
two 1.0 0 0
Run Code Online (Sandbox Code Playgroud)
我喜欢groupby
和unstack
df.groupby(['A', 'B']).C.mean().unstack(fill_value=0)
Run Code Online (Sandbox Code Playgroud)