2017-08-08 80 views
0

我正在使用python熊猫,我想调整一个相同的索引到多个列,并将其制作成一列。如果可能的话,我也想删除零值。如何重新安排多列到同一索引的一列

我有这样的数据帧

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在dataframe中的值为NaN

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

  1. 首先,我由多列成一列由melt功能,
  2. 然后通过dropna函数除去在每个行NaN值。

Coding Script Snipppet

+0

的Python版本您使用的?您导入并用于此任务的任何特定Python模块?最后但并非最不重要的是,你到目前为止尝试过什么? – araknoid

+0

@araknoid我正在使用python 3.6.1。我正在尝试使用熊猫来完成这项任务。因为我是python的新手,我正在通过应用示例代码来学习模块和包。所以我试图找到一个代码,将多列合并到一列中,同时保持相同的索引。但我只能找到“将一列分成多列或将多列数据合并为一列一列的方法”......所以我上传了这个问题。 – Hyein

回答

1

这看起来像在pandasmelt功能一点,唯一的区别是指数。

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) 

Image of the my jupter notebook

随着一点点的操作,你可以解决索引问题。

这是不是特别Python的,但如果你有列的数量有限,你可以做出应有的搭配:

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]) 

Merge of the melted data frames

+0

谢谢!我使用了熔化函数并解决了这个任务。 – Hyein

0

试试这个:

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]] ... ] 
+0

感谢您的其他方法。 – Hyein