我有以下数据框
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但没有运气。这似乎是一个如此简单的任务,所以也许我正在过度思考它。
答案 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)
来更正索引。