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
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
**4)**或者,将set_index与unstack一起使用
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
2条答案
按热度按时间c9qzyr3d1#
以下是重塑数据的几种方法
df
**1)**使用
pd.crosstab()
**2)**或者,在
'Col X','Col Y'
上使用groupby
,在Col Y
上使用unstack
,然后用零填充NaNs
。**3)**或者,将
pd.pivot_table()
与index=Col X
、columns=Col Y
一起使用**4)**或者,将
set_index
与unstack
一起使用vbopmzt12#
从pandas 1.1.0开始,
value_counts()
可以在dataframe上调用。所以另一种方法是对每对Col X-Col Y值进行计数并解栈计数。