如何在Python中为两个分类变量创建透视表?

wfveoks0  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(152)

我的数据看起来像:
| 索引|工作|是|余额|
| - ------|- ------|- ------|- ------|
| 1个|A类|是的|1个|
| 第二章|B|没有|第二章|
| 三个|A类|没有|五个|
| 四个|A类|没有|无|
| 五个|B|是的|四个|
我想按以下格式汇总数据,行中为job,列中为Y:
| | 是的|没有|
| - ------|- ------|- ------|
| A类|1个|第二章|
| B| 1个|1个|
我试过下面的代码:

pivot = df.pivot_table(index =['job'], columns = ['y'], values = ['balance'], aggfunc ='count')

如果不在value参数中使用balance,我将无法运行透视。如何得到上面的结果?

new9mtju

new9mtju1#

你可以试试这个:

data = {'Index': [1, 2, 3, 4, 5],
'job': ['A', 'B', 'A', 'A', 'B'],
'y': ['Yes', 'No', 'No', 'No', 'Yes'],
'Balance': [1, 2, 5, 0, 4]}
df = pd.DataFrame(data)

pivot = df.groupby(['job', 'y']).size().unstack(fill_value=0)

print(pivot)
kcugc4gi

kcugc4gi2#

要做到这一点,您需要先执行df.groupby(),使用以下代码对Job和Y列上的数据进行分组,以获得yes/no的计数:

df2 = df.groupby(['Job', 'Y'], as_index=False).count()

  Job    Y  Balance
0   A   No        2
1   A  Yes        1
2   B   No        1
3   B  Yes        1

然后,您可以使用df2.pivot()将此分组表透视为所需的格式:

df2.pivot(index='Job', columns='Y', values='Balance')

Y    No  Yes
Job         
A     2    1
B     1    1

相关问题