一种改变Pandas.DataFrame的Pythonic方法

enter image description here


我左边有一个Pandas.DataFrame.
我想把它重塑成右边的形式.
每个标签(a,b和c)的值的数量是相同的.

我现在正在做的是创建一个新的DataFrame,然后通过添加每个列将每个标签的值附加到其上.
它确实有效,但据我所知,Pandas.DataFrame非常强大,我相信必须有更多Pythonic方式来完成任务.

任何帮助将不胜感激!

解决方法:

一种方法是使用cumcount然后使用pivot_table

In [11]: df["count"] = df.groupby("label").cumcount()

In [12]: df
Out[12]:
  label  value  count
0     a    0.2      0
1     a    0.1      1
2     a    0.4      2
3     b    0.5      0
4     b    0.2      1
5     b    0.6      2
6     c    0.7      0
7     c    0.9      1
8     c    0.3      2

In [13]: df.pivot_table("value", "count", "label")
Out[13]:
label    a    b    c
count
0      0.2  0.5  0.7
1      0.1  0.2  0.9
2      0.4  0.6  0.3

如果您可以获得每组中的订单和编号,您可以重塑:

In [21]: df["value"].values.reshape((-1, 3)).T
Out[21]:
array([[ 0.2,  0.5,  0.7],
       [ 0.1,  0.2,  0.9],
       [ 0.4,  0.6,  0.3]])

您可以使用以下内容将其设为DataFrame:

In [22]: pd.DataFrame(df["value"].values.reshape((-1, 3)).T, 
                      columns=df.loc[::3, "label"])
Out[22]:
label    a    b    c
0      0.2  0.5  0.7
1      0.1  0.2  0.9
2      0.4  0.6  0.3

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...