将转换应用于表(Pandas)

时间:2014-07-07 21:17:46

标签: pandas

我有以下数据框

Index ID    Wt    Wt.1
0     4999  3.2   1.2
1     5012  1.1   3.4
2     5027  4.4   5.6

我正在尝试应用转换以获得类似于以下内容的数据框

Index ID    Wt 
0     4999  3.2
0     4999  1.2
1     5012  1.1
1     5012  3.4
2     5027  4.4
2     5027  5.6

有简单的方法吗?我尝试过使用melt,groupby和pivot_table但没有运气。这似乎是一个如此简单的任务,所以也许我正在过度思考它。

2 个答案:

答案 0 :(得分:0)

您可以在几行中完成,但我将逐步展示它们:

In [86]:

df2=df.set_index(['Index', 'ID'])
df3=df2.stack().reset_index()
df3=df3.ix[:,['Index', 'ID', 0]]
df3.columns=['Index', 'ID', 'Wt']
print df3
   Index    ID   Wt
0      0  4999  3.2
1      0  4999  1.2
2      1  5012  1.1
3      1  5012  3.4
4      2  5027  4.4
5      2  5027  5.6

答案 1 :(得分:0)

一种方法是将空数据帧中的'ID'和'Wt.1'列分配给空数据帧作为目标'ID'和'Wt'列,这样做有一个小优势,因为你不能在你有NaN值以及'Wt'和'Wt.1'列的末尾,你会得到一个凌乱的追加。

In [28]:

temp = pd.DataFrame()
temp[['ID','Wt']] = df[['ID','Wt.1']]
df1 = df[['ID','Wt']].append(temp)

df1
Out[28]:
         ID   Wt
Index           
0      4999  3.2
1      5012  1.1
2      5027  4.4
0      4999  1.2
1      5012  3.4
2      5027  5.6

[6 rows x 2 columns]

之后您可以致电df1.reset_index(inplace=True)来更正索引。