Python dataframe:如何按列中的值分组,以及如何从分组的值中创建新列
我有一个包含两列的数据框:Python dataframe:如何按列中的值分组,以及如何从分组的值中创建新列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含两列的数据框: 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次。您可以使用groupby/cumcount分配列号,然后调用pivot: import pandas as pd df = pd.DataFrame({'x': [0, 1, 2, 0, 1, 2, 0, 1, 2,
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次。您可以使用
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
0 1 2 3
0 1 5 1 1
1 1 6 8 7
2 2 8 4 3
或者,如果您确实可以依靠
x
中的值以N次的顺序重复
屈服
y
columns 0 1 2 3
x
0 1 5 1 1
1 1 6 8 7
2 2 8 4 3
0 1 2 3
0 1 5 1 1
1 1 6 8 7
2 2 8 4 3
使用重塑
比调用groupby/cumcount
和pivot
更快,但是
由于依赖于以正确顺序出现的
y
中的值,因此稳定性较差。我认为预期输出中缺少列标题,因为您有五个num列和四个标题。