如何重新安排多列到同一索引的一列
我正在使用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步重新组织数据帧:
- 首先,我由多列成一列由
melt
功能, - 然后通过
dropna
函数除去在每个行NaN
值。
这看起来像在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)
随着一点点的操作,你可以解决索引问题。
这是不是特别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])
谢谢!我使用了熔化函数并解决了这个任务。 – Hyein
试试这个:
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]] ... ]
感谢您的其他方法。 – Hyein
的Python版本您使用的?您导入并用于此任务的任何特定Python模块?最后但并非最不重要的是,你到目前为止尝试过什么? – araknoid
@araknoid我正在使用python 3.6.1。我正在尝试使用熊猫来完成这项任务。因为我是python的新手,我正在通过应用示例代码来学习模块和包。所以我试图找到一个代码,将多列合并到一列中,同时保持相同的索引。但我只能找到“将一列分成多列或将多列数据合并为一列一列的方法”......所以我上传了这个问题。 – Hyein