Dav*_*ave 2 python pivot-table melt pandas
我有一组数字(我认为该格式使其成为数据透视表),我想将其转换为“整洁”的数据框。例如,我从左侧的变量 1、顶部的变量 2 和中间的感兴趣值开始,如下所示:
X Y
A 1 2
B 3 4
Run Code Online (Sandbox Code Playgroud)
我想把它变成这样一个整洁的数据框:
V1 V2 value
A X 1
A Y 2
B X 3
B Y 4
Run Code Online (Sandbox Code Playgroud)
行和列顺序对我来说无关紧要,所以以下是完全可以接受的:
value V1 V2
2 A Y
4 B Y
3 B X
1 A X
Run Code Online (Sandbox Code Playgroud)
对于我的第一次尝试,它能够让我得到正确的最终答案,我遍历了行和列。这非常慢,我怀疑 Pandas 中的某些机器会使它运行得更快。
这似乎melt与我寻求的魔法很接近,但它并没有让我一路走到那里。第一个数组变成了这个:
V2 value
0 X 1
1 X 2
2 Y 3
3 Y 4
Run Code Online (Sandbox Code Playgroud)
它摆脱了我的 V1 变量!
没有什么特别之处melt,所以我很乐意阅读使用其他方法的答案,特别是如果melt它并不比我的嵌套循环快多少,而另一个解决方案是。尽管如此,我怎样才能从那个数组转到我想要作为输出的那种整洁的数据框?
示例数据框:
df = pd.DataFrame({"X":[1,3], "Y":[2,4]},index=["A","B"])
Run Code Online (Sandbox Code Playgroud)
DataFrame.reset_index与然后一起使用。如果您想要订购列,我们可以使用.DataFrame.rename_axis DataFrame.meltDataFrame.reindex
new_df = (df.rename_axis(index = 'V1')
.reset_index()
.melt('V1',var_name='V2')
.reindex(columns = ['value','V1','V2']))
print(new_df)
Run Code Online (Sandbox Code Playgroud)
另一种方法DataFrame.stack:
new_df = (df.stack()
.rename_axis(index = ['V1','V2'])
.rename('value')
.reset_index()
.reindex(columns = ['value','V1','V2']))
print(new_df)
Run Code Online (Sandbox Code Playgroud)
value V1 V2
0 1 A X
1 3 B X
2 2 A Y
3 4 B Y
Run Code Online (Sandbox Code Playgroud)
到名称的名称有喜欢评论另一种选择@Scott波士顿的评论
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |