简体   繁体   English

如何使用 Lambda 应用 pd.crosstab

[英]How to Apply pd.crosstab using Lambda

For the below pandas dataframe:对于以下 pandas dataframe:

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)

Output df : Output df

Q1 Q2  Cat
0  Y  Y  BIN
1  Y  N  CIN
2  N  N  BIN
3  N  Y  CIN
4  Y  Y  BIN

I want to take crosstab "Cat" with "Q1 and Q2" in one go.我想在一个 go 中使用带有“Q1 和 Q2”的交叉表“Cat”。 For which I tried apply with lambda:我尝试使用 lambda 申请:

x = pandas.Series(["Q1", "Q2"])
a1 = x.apply(lambda a: pd.crosstab(df[a],df["Cat"]))

I am getting some weird results from this:我得到了一些奇怪的结果:

0    Cat  BIN  CIN
Q1           
N      1    1
Y   ...
1    Cat  BIN  CIN
Q2           
N      1    1
Y   ...
dtype: object

Whereas when I try the same using a for loop I am getting the below-desired result:而当我使用 for 循环尝试相同的操作时,我得到了以下期望的结果:

for i in x:
    a = pd.crosstab(df[i],df["Cat"])  
    print(a)

Desired output:所需的 output:

Cat  BIN  CIN
Q1           
N      1    1
Y      2    1
Cat  BIN  CIN
Q2           
N      1    1
Y      2    1

Please help me with the error happening in taking the Crosstab with apply + lambda.请帮助我解决使用 apply + lambda 获取交叉表时发生的错误。

You may not need to use lambda with the crosstab您可能不需要将 lambda 与交叉表一起使用

pd.crosstab([df.Q1, df.Q2], df.Cat)

IIUC, use melt , then pd.crosstab : IIUC,使用melt ,然后使用pd.crosstab

df_melt = df.melt('Cat')
pd.crosstab([df_melt['variable'],df_melt['value']], df_melt['Cat'])

Output: Output:

Cat             BIN  CIN
variable value          
Q1       N        1    1
         Y        2    1
Q2       N        1    1
         Y        2    1

For printing groups对于打印组

df_out = pd.crosstab([df_melt['variable'],df_melt['value']], df_melt['Cat'])
for _, i in df_out.groupby(level=0):
    print(i)

Output: Output:

Cat             BIN  CIN
variable value          
Q1       N        1    1
         Y        2    1
Cat             BIN  CIN
variable value          
Q2       N        1    1
         Y        2    1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM