python - 将数据分散到多个列中

标签 python pandas

我有一个 Pandas DataFrame df,如下所示:

            name  value
2014-01-01  temp   10.0
2014-01-01     p  101.0
2014-01-02  temp   11.5
2014-01-02     p  100.0

我想构建一个具有唯一索引的新 DataFrame 每个数据一列。

类似df2:

            temp      p
2014-01-01  10.0  101.0
2014-01-02  11.5  100.0

我的第一个想法是使用创建一个新的 DataFrame

df2 = pd.DataFrame(index=df.index.unique(), columns=df['name'].unique())

并使用 for 循环来填充此 DataFrame

for col in df['name'].unique():
    df2[col] = df[df['name']==col]['value']

但我认为 Pandas 可以更有效地做到这一点。

有什么想法吗?

最佳答案

正如 @scls 在下面的评论中指出的,当使用 pivot 对索引中具有重复条目的 DataFrame 执行此操作时,pandas 中可能存在错误。

您需要在此处使用修改后的版本才能使其正常工作:

df.pivot(columns='name', index=df.index)['value']

编辑:下面的答案似乎不适用于索引中的重复条目,与 pandas 文档相比,这似乎是一个错误,它说如果省略 index ,则唯一元素将使用现有索引的一部分。

这也是有问题的,因为在这种情况下,使用 set_index 后跟 unstack 将非常乏味,因为可能的索引级别之一已经是索引,另一个不是。我们希望将name“附加”到索引中,而不需要首先从那里弹出未命名的现有索引,这可以完成,但会导致烦人的、不可读的语法。

原始答案:使用pandas.DataFrame中提供的设施pivot function ,以您要用作类别的列为中心。

>>> df.pivot(columns='name', values='value')
>>> 
variable    temp      p        

2004-01-01  10.0  101.0
2004-01-02  11.5  100.0

如果您遇到与索引相关的错误,请尝试将索引添加为数据透视表的一部分:

df.pivot(index=df.index, columns='name', values='value')

这也可以选择通过 function pivot_table 来完成直接在 pandas 模块顶级命名空间中,如下所示:

pandas.pivot_table(df, ...)

如果您不想直接从被测试的 DataFrame 调用。

关于python - 将数据分散到多个列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26101246/

相关文章:

python - 重置索引后出现关键错误

python - 如何解析在查看源代码中不显示代码的网站?

python - Tensorflow (1.4.1) Tensorboard 可视化图可以追溯到过去吗?

python - Selenium Python,如何在没有 "url"的情况下将 PDF 下载到特定位置

python - 如何在 python Pandas 中执行/解决条件连接?

python - 列值的总和等于

python - 如何对列表项使用 sum() ?

java - 如何像在 python 中那样使用 Lambda 对 Java 中的 List 值进行分组

python - 夏令时移动 1 小时时重建索引不正确

python - pandas 基于列子集的行选择