Pandas数据帧重新整形,标签为轴

时间:2018-06-17 00:39:55

标签: python pandas pandas-groupby

假设我有一组带有两个标签的数据,放在一个pandas Dataframe:

    label1 label2
0        0      a
1        1      a
2        1      a
3        1      a
4        1      a
5        2      b
6        0      b
7        1      b
8        2      b
9        0      b
10       2      c
11       1      c
12       2      c
13       0      c
14       2      c

使用以下代码,可以获得每种标签组合的元素数量:

grouped = df.groupby(['label1', 'label2'], sort = False)
grouped.size()

结果是这样的:

label1  label2
0       a         1
1       a         4
2       b         2
0       b         2
1       b         1
2       c         3
1       c         1
0       c         1
dtype: int64

但是,我还想比较每个标签1组中标签2的数据分布。我想为此目的进一步操作数据最方便的方法是使用一个Dataframe(或某种表),其中label1 / 2为行/列,内容为数据计数,如下所示:

    a   b   c
0   1   2   1
1   4   1   1
2   0   2   3

经过一段时间的搜索,令我惊讶的是,似乎没有简单的方法在熊猫中进行这种数据帧重塑。

可以使用循环。但我认为它会超级慢,因为在真实数据中,有数十万种不同的标签。

此外,在使用label1和label2进行分组后,似乎无法从label1获取组,因此循环必须在标签组合上,这可能会使事情变得更慢更复杂。

任何人都知道这样做的聪明方法吗?

2 个答案:

答案 0 :(得分:0)

您在寻找pd.pivot_table吗?

df.pivot_table(index='label1', columns='label2', aggfunc='size').fillna(0)

答案 1 :(得分:0)

可能是交叉表:

pd.crosstab(df.label1, df.label2)