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

Posted

技术标签:

【中文标题】熊猫数据框:将列转换为单列的行【英文标题】:Pandas dataframe: convert columns into rows of a single column 【发布时间】:2019-07-14 11:47:37 【问题描述】:

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

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 完成的吗?如果有,怎么做?

还有其他 pandas-mic 解决方案吗?

【问题讨论】:

【参考方案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

【讨论】:

这确实很神奇。此操作是否有通用名称,例如透视是对表格数据的标准操作? @Nik 这是reshape ,就像融化和堆叠--Unpivots

以上是关于熊猫数据框:将列转换为单列的行的主要内容,如果未能解决你的问题,请参考以下文章

熊猫将列转换为行[重复]

将列添加到熊猫数据框以进行多索引

将多个 int 列/行合并为一个 numpy 数组(熊猫数据框)

将列字符串转换/解析为日期时间值 - 熊猫

熊猫:将列中的列表拆分为多行[重复]

将列标题添加到熊猫数据框..但是即使标题是相同的维度,NAN 也是所有数据