微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一种改变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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐