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