pandas - Pandas:索引的某些部分作为重复列值
问题描述
跟随“日期”和“总计”重复的数据框,但属性名称每次都是唯一的。
l0 l1 Value
001 attribute1 1
attribute2 5
attribute3 8
date 1/1/20
total 500
002 somethingelse(notAttribute-1) 84
somethingelse-entirely 24
date 2/2/20
total 1000
.
.
.
040
需要指导以使其如下,因为这需要提取索引的特定部分(每个级别 0 (l0) 的级别 1 (l1) 的最后 2 个值。)
l0 l1 Value date total
001 attribute1 1 1/1/20 500
attribute2 5 1/1/20 500
attribute3 8 1/1/20 500
002 somethingelse(notAttribute-1) 84 2/2/20 1000
somethingelse-entirely 24 2/2/20 1000
.
.
.
040
解决方案
设置
df = pd.read_clipboard()
df = df.set_index(['l0','l1'])
print(df)
Value
l0 l1
1 attribute1 1
attribute2 5
attribute3 8
date 1/1/20
total 500
2 somethingelse(not-attribute-1) 84
somethingelse-entirely 24
date 2/2/20
total 1000
解决方案:Series.unstack
+DataFrame.melt
new_df = (df['Value'].unstack('l1')
.reset_index()
.melt(['l0','date','total'])
.dropna()
.set_index(['l0','l1']))
print(new_df)
date total value
l0 l1
1 attribute1 1/1/20 500 1
attribute2 1/1/20 500 5
attribute3 1/1/20 500 8
2 somethingelse(not-attribute-1) 2/2/20 1000 84
somethingelse-entirely 2/2/20 1000 24
推荐阅读
- gdb - 如何在 Cygwin 中安装调试器并使用 gdb 调试 C 程序?
- css - 如何在屏幕中居中模式?
- python-3.x - 写入 WAV 文件会导致 struct.error: required argument is not an integer
- ruby-on-rails - rails c 在 Ubuntu 18.04.5 LTS 中根本无法打开
- powershell - PowerShell:如何检查为用户密码输入了多少位
- python - 在 Python 中按任何元素对嵌套列表进行排序
- html - 同时改变宽度、高度和变换会导致奇怪的过渡
- c++ - Visual Studio 代码看不到 boost 库
- gremlin - Gremlin:如何使用 math() 过滤遍历结果?
- spring - MAP 和 Web 服务之间的区别