对于下面的熊猫数据框:
Col = ["Q1", "Q2", "Cat"]
data = [["Y","Y","BIN"],["Y","N","CIN"],["N","N","BIN"],["N","Y","CIN"],["Y","Y","BIN"]]
df = pd.DataFrame(data,columns = col)
Q1 Q2 Cat
0 Y Y BIN
1 Y N CIN
2 N N BIN
3 N Y CIN
4 Y Y BIN
我想一次性使用带有“ Q1和Q2”的交叉表“ Cat”。我尝试使用lambda进行申请:
x = pandas.Series(["Q1", "Q2"])
a1 = x.apply(lambda a: pd.crosstab(df[a],df["Cat"]))
我从中得到一些奇怪的结果:
0 Cat BIN CIN
Q1
N 1 1
Y ...
1 Cat BIN CIN
Q2
N 1 1
Y ...
dtype: object
而当我使用for循环尝试相同操作时,我得到了以下期望的结果:
for i in x:
a = pd.crosstab(df[i],df["Cat"])
print(a)
输出:
Cat BIN CIN
Q1
N 1 1
Y 2 1
Cat BIN CIN
Q2
N 1 1
Y 2 1
[请帮助我解决在使用交叉应用交叉表和lambda的情况下发生的错误。
您可能不需要将lambda与交叉表一起使用
pd.crosstab([df.Q1, df.Q2], df.Cat)