我正在尝试将4个分类列合并为1个,大熊猫融化,但它会为每行创建3个重复项(使我多出4倍的行)。
dat = pd.DataFrame({'Name':('Tom','Pete','Mark','Steve'),
'Type1':(0,1,0,0),
'Type2':(1,0,0,0),
'Type3':(0,0,0,0),
'Type4':(0,0,0,0)})
dat = pd.melt(dat, id_vars='Name',
value_vars=('Type1', 'Type2', 'Type3', 'Type4'), value_name='type')
Name variable type
0 Tom Type1 0
1 Pete Type1 1
2 Mark Type1 0
3 Steve Type1 0
4 Tom Type2 1
5 Pete Type2 0
6 Mark Type2 0
7 Steve Type2 0
8 Tom Type3 0
9 Pete Type3 0
10 Mark Type3 0
11 Steve Type3 0
12 Tom Type4 0
13 Pete Type4 0
14 Mark Type4 0
15 Steve Type4 0
我遇到的另一个问题,我想不能通过melt解决,所有问题都是用'None'替换所有Types值为0的行-但这可以通过简单的查询完成-修复我现在担心重复。除非我不应该使用融化?
我想要得到的是:具有Type1或2或3或4的列。所以在这种情况下:
Name Type
0 Tom Type2
1 Pete Type1
2 Mark Type3
3 Steve Type3
最后2个位置最好变成'None',因为这2个名字没有分配类型。 (希望我不会发疯,这对除了我以外的人来说都是有意义的。)
答案 0 :(得分:1)
idxmax
dat = pd.DataFrame({'Name':('Tom','Pete','Mark','Steve'),
'Type1':(0,1,0,0),
'Type2':(1,0,0,0),
'Type3':(0,0,0,0),
'Type4':(0,0,0,0)})
df = dat.loc[:,'Type1':].replace(0, np.nan)
df.idxmax(axis=1).to_frame(name='Type').set_index(dat.Name)
Type
Name
Tom Type2
Pete Type1
Mark NaN
Steve NaN