如何将多列重新排列为具有相同索引的一列

Posted

技术标签:

【中文标题】如何将多列重新排列为具有相同索引的一列【英文标题】:how to re-arrange multiple columns into one column with same index 【发布时间】:2018-01-16 04:14:39 【问题描述】:

我正在使用 python pandas,我想将一个相同的索引调整为多列并使其成为一列。如果可能的话,我也想删除零值。

我有这个数据框

index A B C 
a     8 0 1 
b     2 3 0
c     0 4 0 
d     3 2 7 

我希望我的输出看起来像这样

index data value
a     A    8 
b     A    2
d     A    3
b     B    3
c     B    4
d     B    2
a     C    1
d     C    7

=== 我解决了这个任务如下。我的原始数据有 2 个索引,数据框中的 0 个是 NaN 值。

起初,我尝试应用 melt 函数,同时删除此 (How to melt a dataframe in Pandas with the option for removing NA values) 之后的 NaN 值,但我做不到。 因为我的原始数据有几列('value_vars')。所以我通过 2 个步骤重新组织了数据框:

    首先,我通过melt函数将多列变为一列, 然后通过dropna 函数删除每行中的NaN 值。

【问题讨论】:

你用的是哪个版本的python?您导入并用于此任务的任何特定 python 模块?最后但并非最不重要的一点是,到目前为止,您尝试过什么? @araknoid 我正在使用 python 3.6.1。我正在尝试使用 Pandas 来完成这项任务。因为我是 python 新手,所以我正在通过应用示例代码来学习模块、包。所以我试图找到一个代码来将多列合并到一列中,同时保持相同的索引。但我只能找到“将一列拆分为多列或将多列中的数据按列行合并为一列”的方法......所以我上传了这个问题。 【参考方案1】:

这看起来有点像pandas 中的melt 函数,唯一的区别是索引。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.melt.html

这里有一些你可以运行测试的代码:

import pandas as pd
df = pd.DataFrame('A': 0: 'a', 1: 'b', 2: 'c','B': 0: 1, 1: 3, 2: 5,'C': 0: 2, 1: 4, 2: 6)
pd.melt(df)

稍加操作,您就可以解决索引问题。

这不是特别pythonic,但如果您的列数有限,您可以使用:

molten = pd.melt(df)
a = molten.merge(df, left_on='value', right_on = 'A') 
b = molten.merge(df, left_on='value', right_on = 'B') 
c = molten.merge(df, left_on='value', right_on = 'C') 
merge = pd.concat([a,b,c])

【讨论】:

谢谢!我使用了融化功能并解决了这个任务。【参考方案2】:

试试这个:

array = [['a', 8, 0, 1], ['b', 2, 3, 0] ... ]
cols = ['A', 'B', 'C']

result = [[[a[i][0], cols[j], a[i][j + 1]] for i in range(len(a))] for j in range(2)]

输出:

[[['a', 'A', 8], ['b', 'A', 2]], [['a', 'B', 0], ['b', 'B', 3]] ... ]

【讨论】:

以上是关于如何将多列重新排列为具有相同索引的一列的主要内容,如果未能解决你的问题,请参考以下文章

请问如何用一个函数将excel中多列数据变为一列。谢谢!

excel里面怎么将一列数据平均的分成多列

mysql数据库索引

使用 Scala 将多列转换为 Spark Dataframe 上的一列地图

如何在 MySQL 中将多列处理为一列?

Excel如何把两列中相同的数据找出,并对应内容排列?