我有一个格式如下的 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
