【发布时间】:2014-02-10 09:39:03
【问题描述】:
给定具有不同分类变量的数据框,我如何返回包含百分比而不是频率的交叉表?
df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
'B' : ['A', 'B', 'C'] * 8,
'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
'D' : np.random.randn(24),
'E' : np.random.randn(24)})
pd.crosstab(df.A,df.B)
B A B C
A
one 4 4 4
three 2 2 2
two 2 2 2
使用交叉表中的边距选项来计算行和列总计让我们足够接近认为应该可以使用 aggfunc 或 groupby,但我微薄的大脑无法思考。
B A B C
A
one .33 .33 .33
three .33 .33 .33
two .33 .33 .33
【问题讨论】:
-
你不希望表格是
0.167 0.167 0.167\n 0.083 0.083 0.083\n 0.083 0.083 0.083吗? -
我想你特别想要“行内百分比”(例如en.wikipedia.org/wiki/Crosstab)。
-
在 Pandas 0.18.1 中,您似乎可以通过 normalize="index" 将每个条目划分为行的 sum 。