如何使用Lambda应用pd.crosstab

问题描述 投票:0回答:1

对于下面的熊猫数据框:

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的情况下发生的错误。

pandas lambda apply crosstab
1个回答
0
投票

您可能不需要将lambda与交叉表一起使用

pd.crosstab([df.Q1, df.Q2], df.Cat)
© www.soinside.com 2019 - 2024. All rights reserved.