我有一个数据帧,看起来像
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,转换后的数据集中有2行,一行用于feature1,另一行用于feature3。userId 234567被删除,因为没有一个特征是非零的。
这是可以使用groupby或pivoting来完成的吗?如果是这样的话,是怎么做的?
有没有其他的熊猫-麦克风解决方案?
发布于 2019-02-21 01:38:04
来自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时,您需要对NaN使用掩码0
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.20https://stackoverflow.com/questions/54792245
复制相似问题