Pandas数据框:将列转换为单列的行

时间:2019-02-20 17:35:31

标签: python pandas dataframe pivot-table

我有一个看起来像的数据框

userId  feature1  feature2  feature3  ...
123456  0         0.45      0         ...
234567  0         0         0         ...
345678  0.6       0         0.2       ...
.
.

特征大部分为零,但偶尔其中一些会具有非零值。 userId的一行可能具有零个,一个或多个非零特征。

我想将其转换为以下数据集:

userId  feature  value
123456  feature2 0.45
345678  feature1 0.6
345678  feature3 0.2

本质上,我们只保留每个userId不为零的功能。因此,对于userId 345678,我们在转换后的数据集中有两行,一个行用于feature1,另一行用于feature3。由于所有功能均非零,因此删除了userId 234567。

这是可以通过groupby或pivot完成的吗?如果可以,怎么办?

还有其他熊猫麦克风解决方案吗?

1 个答案:

答案 0 :(得分:1)

来自melt的魔术师

df.melt('userId').query('value!=0')
Out[459]: 
   userId  variable  value
2  345678  feature1   0.60
3  123456  feature2   0.45
8  345678  feature3   0.20

使用stack的通知,您需要将掩码0设置为NaN

df.mask(df.eq(0)).set_index('userId').stack().reset_index()
Out[460]: 
   userId   level_1     0
0  123456  feature2  0.45
1  345678  feature1  0.60
2  345678  feature3  0.20