跨多个列分布数据

2024-04-19 00:55:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pandas数据帧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

我想建立一个新的具有唯一索引的数据帧 每个数据有一列。在

类似df2

^{pr2}$

我的第一个想法是用

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

并使用for循环来填充此数据帧

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

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

有什么想法吗?在


Tags: columns数据namedataframepandasdfforindex
1条回答
网友
1楼 · 发布于 2024-04-19 00:55:35

正如@scls在下面的评论中指出的,当使用pivot对索引中有重复项的数据帧执行此操作时,pandas中可能存在一个bug。在

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

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

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

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

最初的答案是:使用pandas.DataFrame^{} function中提供的工具,以您想要作为类别的列为中心。在

^{pr2}$

如果与索引相关的错误有问题,请尝试将索引添加为数据透视的一部分:

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

也可以选择直接使用function ^{}模块顶层命名空间中的function ^{}来完成,如:

pandas.pivot_table(df, ...)

如果您不想直接从被测数据帧调用。在

相关问题 更多 >