Pandas的数据透视表或分组表?

Ste*_*ish 22 python group-by pivot-table count pandas

我有一个希望直截了当的问题,在过去3个小时里给我带来了很多困难.应该很容易.

这是挑战.

我有一个pandas数据帧:

+--------------------------+
|     Col 'X'    Col 'Y'  |
+--------------------------+
|     class 1      cat 1  |
|     class 2      cat 1  |
|     class 3      cat 2  |
|     class 2      cat 3  |
+--------------------------+
Run Code Online (Sandbox Code Playgroud)

我想要将数据帧转换为:

+------------------------------------------+
|                  cat 1    cat 2    cat 3 |
+------------------------------------------+
|     class 1         1        0        0  |
|     class 2         1        0        1  |
|     class 3         0        1        0  |
+------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

其中值是值计数.有人有任何见解吗?谢谢!

Zer*_*ero 53

以下是重塑数据的几种方法 df

In [27]: df
Out[27]:
     Col X  Col Y
0  class 1  cat 1
1  class 2  cat 1
2  class 3  cat 2
3  class 2  cat 3
Run Code Online (Sandbox Code Playgroud)

1)使用pd.crosstab()

In [28]: pd.crosstab(df['Col X'], df['Col Y'])
Out[28]:
Col Y    cat 1  cat 2  cat 3
Col X
class 1      1      0      0
class 2      1      0      1
class 3      0      1      0
Run Code Online (Sandbox Code Playgroud)

2)或者,使用groupby'Col X','Col Y'unstackCol Y,然后填写NaNs零.

In [29]: df.groupby(['Col X','Col Y']).size().unstack('Col Y', fill_value=0)
Out[29]:
Col Y    cat 1  cat 2  cat 3
Col X
class 1      1      0      0
class 2      1      0      1
class 3      0      1      0
Run Code Online (Sandbox Code Playgroud)

3)或者,使用pd.pivot_table()index=Col X,columns=Col Y

In [30]: pd.pivot_table(df, index=['Col X'], columns=['Col Y'], aggfunc=len, fill_value=0)
Out[30]:
Col Y    cat 1  cat 2  cat 3
Col X
class 1      1      0      0
class 2      1      0      1
class 3      0      1      0
Run Code Online (Sandbox Code Playgroud)

4)或者,使用set_indexunstack

In [492]: df.assign(v=1).set_index(['Col X', 'Col Y'])['v'].unstack(fill_value=0)
Out[492]:
Col Y    cat 1  cat 2  cat 3
Col X
class 1      1      0      0
class 2      1      0      1
class 3      0      1      0
Run Code Online (Sandbox Code Playgroud)

  • 遇到这个是因为我试图找出 groupby 和 pivot_table 之间的区别以及何时使用哪个。你的回答肯定有帮助。您是否知道有关不同概念的某种易于理解的信息?干杯 (2认同)