这是我的问题:
df = pd.DataFrame({'A': ['one', 'one', 'two', 'two', 'one'] ,
'B': ['Ar', 'Br', 'Cr', 'Ar','Ar'] ,
'C': [1, 0, 0, 1,0 ]})
我想生成类似于 pd.crosstab
函数的输出,但是列和行交叉点上的值应该来自第三列的聚合:
Ar, Br, Cr
one 0.5 0 0
two 1 0 0
例如,'one'和'Ar'有两种情况,'C'列中对应的值为1,0我们将'C'列中的值相加(0 + 1)并除以值的数量“C”列,所以我们得到 (0+1)/2 =0.5。每当组合不存在时,我们(如“Cr”和“one”)将其设置为零。有什么想法吗?
最佳答案
你可以使用pivot_table()方法,默认使用 aggfunc='mean'
:
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
关于python - Pandas 交叉表,但具有来自第三列聚合的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735068/