如何合并pandas中交叉表的类别?

2021-12-08 06:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我的pandas数据帧对于变量X[A, B, C]有3个类别,对于变量Y[D,E]有2个类别。我想用这样的东西来交叉统计一下:

+--------+----------------------+-----+
|  X/Y   |          D           |  E  |
+--------+----------------------+-----+
| A or B | count(X=A or B, Y=D) | ... |
| C      | count(X=C),Y=D)      | ... |
+--------+----------------------+-----+
2条回答
网友
1楼 ·

为此,可以使用pandas.pivot_table()。这应该可以做到-df引用输入数据帧。你知道吗

import numpy as np

df["catX"]=np.where(df["X"].isin(["A","B"]), "AB", np.where(df["X"]=="C", "C", "other"))

df2=df.pivot_table(index="catX", columns="Y", aggfunc='count', values="X")

样本输出:

#input - df with extra categorical column - catX
    X  Y catX
0   A  D   AB
1   B  D   AB
2   C  E    C
3   B  E   AB
4   C  D    C
5   B  D   AB
6   C  D    C
7   A  E   AB
8   A  D   AB
9   A  E   AB
10  C  E    C
11  C  E    C
12  A  E   AB

#result:
Y     D  E
catX
AB    4  4
C     2  3
网友
2楼 ·

这就是你要找的吗?你知道吗

import pandas as pd
import numpy as np
x = np.random.choice(['A', 'B', 'C'], size=10)
y = np.random.choice(['D', 'E'], size=10)
df = pd.DataFrame({'X':x, 'Y':y})
df.head()
输出:
    X   Y
0   A   D
1   B   D
2   B   E
3   B   D
4   A   E

数据帧修改:

df['X'] = df['X'].apply(lambda x: 'A or B' if x == 'A' or x == 'B' else x)

交叉表应用程序:

pd.crosstab(df.X, df.Y)

输出:

Y       D   E
X       
A or B  1   3
C       4   2

相关问题