【发布时间】:2018-08-29 04:05:54
【问题描述】:
我已阅读pandas: how to run a pivot with a multi-index?,但它无法解决我的问题。
给定下面的数据框:
import pandas as pd
df = pd.DataFrame({
"date": ["20180920"] * 6,
"id": ["A123456789"] * 6,
"test": ["a", "b", "c", "d", "e", "f"],
"result": [70, 90, 110, "(-)", "(+)", 0.3],
"ref": ["< 90", "70 - 100", "100 - 120", "(-)", "(-)", "< 1"]
})
我想传播test 列,使用result 中的值,并忽略ref。换句话说,期望的输出是这样的:
date id a b c d e f
0 20180920 A123456789 70 90 110 (-) (+) 0.3
所以我尝试了df.pivot(index=["date", "id"], columns="test", values="result"),但它失败了 ValueError:传递值的长度是 6,索引意味着 2。我认为它与“如果传递一个数组,它必须与数据的长度相同”有关。在pivot_table documentation,但我就是不明白它的意思。有人可以详细说明一下吗?
顺便说一句,我终于通过df.drop(columns="ref").set_index(["date", "id", "test"]).unstack(level=2) 得到了我想要的输出。这是唯一正确的方法吗?
【问题讨论】:
-
另见这里提到的multiindex_pivot函数github.com/pandas-dev/pandas/issues/23955
标签: python pandas dataframe pivot