基于分类列和另一列中的值创建列

时间:2019-12-24 08:59:09

标签: python pandas

我的数据看起来像这样

Weight  Sex
91.0    male
91.0    male
131.0   female
128.0   female
132.0   female
150.0   male

我想要类似

male   female
91.0     0
91.0     0
0        131.0
0        128.0
0        132.0
150.0     0

如何不使用pd.wide_to_long()函数来实现这一目标。

1 个答案:

答案 0 :(得分:4)

使用不带index参数的DataFrame.pivot,然后用DataFrame.fillna替换缺少的值:

df = df.pivot(columns='Sex', values='Weight').fillna(0)
print (df)
Sex  female   male
0       0.0   91.0
1       0.0   91.0
2     131.0    0.0
3     128.0    0.0
4     132.0    0.0
5       0.0  150.0

使用DataFrame.set_indexSeries.unstack的另一种解决方案:

df = df.set_index('Sex', append=True)['Weight'].unstack(fill_value=0)
print (df)
Sex  female   male
0       0.0   91.0
1       0.0   91.0
2     131.0    0.0
3     128.0    0.0
4     132.0    0.0
5       0.0  150.0

如果列的顺序很重要,请添加子集:

df = df.pivot(columns='Sex', values='Weight').fillna(0)[['male','female']]
print (df)
Sex   male  female
0     91.0     0.0
1     91.0     0.0
2      0.0   131.0
3      0.0   128.0
4      0.0   132.0
5    150.0     0.0