我有一个pandas df,格式如下:
$_GET['search']
我想得到输出:
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
我已尝试过数据透视表,但我无法弄清楚。
答案 0 :(得分:2)
使用melt
首先使用groupby
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
杀人:
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
答案 1 :(得分:2)
pivot_table
是一种可能的解决方案:
i = df.melt('TARGET')
j = i.pivot_table(
index='TARGET', columns=['variable', 'value'], aggfunc='size', fill_value=0
)
print(j)
variable FLAG_OWN_CAR FLAG_OWN_REALTY
value N Y N Y
TARGET
0 0 2 1 1
1 1 1 1 1
现在,对于%s的第二部分,你可以除以总和(就像@jezrael所做的那样):
j.div(j.sum(axis=1), axis=0).astype(str).add('%')
variable FLAG_OWN_CAR FLAG_OWN_REALTY
value N Y N Y
TARGET
0 0.0% 0.5% 0.25% 0.25%
1 0.25% 0.25% 0.25% 0.25%
答案 2 :(得分:2)
这是使用UpdateId()
和pd.concat
的方式,即
get_dummies