Python 熊猫-基于非数值数据的数据透视表
我有一个熊猫df,格式如下:Python 熊猫-基于非数值数据的数据透视表,python,pandas,pivot-table,Python,Pandas,Pivot Table,我有一个熊猫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
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%
我尝试过透视表,但无法解决此问题。使用和来首先重塑形状:
然后按每行的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
用于使用和首先重塑形状:
然后按每行的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
pivot_table
是一种可能的解决方案:
i = df.melt('TARGET')
j = i.pivot_table(
index='TARGET', columns=['variable', 'value'], aggfunc='size', fill_value=0
)
现在,对于%s的第二部分,您可以除以总和(如@jezrael has done):
pivot_table
是一种可能的解决方案:
i = df.melt('TARGET')
j = i.pivot_table(
index='TARGET', columns=['variable', 'value'], aggfunc='size', fill_value=0
)
现在,对于%s的第二部分,您可以除以总和(如@jezrael has done):
这里有一种使用
pd.concat
和get\u dummies
的方法,即
df = df.set_index('TARGET')
o = pd.concat([pd.get_dummies(df[col]) for col in df], axis=1, keys=df.columns).sum(level=0)
FLAG_OWN_CAR FLAG_OWN_REALTY
N Y N Y
TARGET
0 0 2 1 1
1 1 1 1 1
这里有一种使用
pd.concat
和get\u dummies
的方法,即
df = df.set_index('TARGET')
o = pd.concat([pd.get_dummies(df[col]) for col in df], axis=1, keys=df.columns).sum(level=0)
FLAG_OWN_CAR FLAG_OWN_REALTY
N Y N Y
TARGET
0 0 2 1 1
1 1 1 1 1
也许在末尾添加
.sort\u index(axis=1)
会使输出更清晰也许在末尾添加.sort\u index(axis=1)
会使输出更清晰我刚刚意识到-你答案的最后一部分的小数点位置不正确。@KamilaAmbro什么?怎么用?这和另一个答案完全一样?我刚刚意识到-你答案的最后一部分小数点位置不正确。@KamilaAmbro什么?怎么用?这和另一个答案完全一样?