Skip to main content
 首页 » 编程设计

python之Pandas之基于非数值数据的数据透视表

2025年05月04日15zengkefu

我有一个格式如下的 pandas df:

TARGET FLAG_OWN_CAR FLAG_OWN_REALTY 
0      Y            N 
1      N            N 
0      Y            Y 
1      Y            Y 

我想得到输出:

        FLAG_OWN_CAR   FLAG_OWN_REALTY 
TARGET  Y        N     Y         N 
0       2        0     1         1 
1       1        1     1         1 

按照上述内容,我还想按百分比获取值,即:

        FLAG_OWN_CAR   FLAG_OWN_REALTY 
TARGET  Y        N     Y         N 
0       50%      0%    25%       25% 
1       25%      25%   25%       25% 

我尝试过数据透视表,但我无法弄明白。

请您参考如下方法:

使用melt先用 groupby reshape 形状value_counts和 unstack :

df = (df.melt('TARGET') 
       .groupby(['TARGET','variable'])['value'] 
       .value_counts() 
       .unstack([1,2], fill_value=0) 
       .rename_axis((None, None), 1)) 
print (df) 
 
       FLAG_OWN_CAR FLAG_OWN_REALTY    FLAG_OWN_CAR 
                  Y               N  Y            N 
TARGET                                              
0                 2               1  1            0 
1                 1               1  1            1 

然后按每行sum dicide:

df = df.div(df.sum(axis=1), axis=0) 
print (df) 
 
       FLAG_OWN_CAR FLAG_OWN_REALTY       FLAG_OWN_CAR 
                  Y               N     Y            N 
TARGET                                                 
0              0.50            0.25  0.25         0.00 
1              0.25            0.25  0.25         0.25