当前位置:  开发笔记 > 编程语言 > 正文

Pandas数据框:如何按列中的值进行分组,并从分组值中创建新列

如何解决《Pandas数据框:如何按列中的值进行分组,并从分组值中创建新列》经验,为你挑选了1个好方法。

我有一个包含两列的数据框:

x y
0 1
1 1
2 2
0 5
1 6
2 8
0 1
1 8
2 4
0 1
1 7
2 3

我想要的是:

x val1 val2 val3 val4
0 1 5 1 1
1 1 6 8 7
2 2 8 4 3

我知道列x中的值全部重复N次.



1> unutbu..:

您可以使用groupby/cumcount分配列号然后调用pivot:

import pandas as pd

df = pd.DataFrame({'x': [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2],
                   'y': [1, 1, 2, 5, 6, 8, 1, 8, 4, 1, 7, 3]})

df['columns'] = df.groupby('x')['y'].cumcount()
#     x  y  columns
# 0   0  1        0
# 1   1  1        0
# 2   2  2        0
# 3   0  5        1
# 4   1  6        1
# 5   2  8        1
# 6   0  1        2
# 7   1  8        2
# 8   2  4        2
# 9   0  1        3
# 10  1  7        3
# 11  2  3        3

result = df.pivot(index='x', columns='columns')
print(result)

产量

         y         
columns  0  1  2  3
x                  
0        1  5  1  1
1        1  6  8  7
2        2  8  4  3

或者,如果你真的可以依靠值x被重复,以 N次,

N = 3
result = pd.DataFrame(df['y'].values.reshape(-1, N).T)

产量

   0  1  2  3
0  1  5  1  1
1  1  6  8  7
2  2  8  4  3

使用reshape比调用更快groupby/cumcountpivot,但它是不太可靠,因为它依赖于值y出现在正确的顺序.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有