不寻常的Pandas DataFrame重塑

时间:2017-01-26 16:26:08

标签: python pandas pivot reshape

我有这样的DF:

df = pd.DataFrame({'x': ['a', 'a', 'b', 'b', 'b', 'c'],
                   'y': [1, 2, 3, 4, 5, 6],
                 })

看起来像:

   x  y
0  a  1
1  a  2
2  b  3
3  b  4
4  b  5
5  c  6

我需要重塑它以保持' x'列唯一:

   x    y_1  y_2  y_3
0  a    1    2    NaN
1  b    3    4    5
2  c    6    NaN  NaN

所以' y_N'的最大N列必须等于

max(df.groupby('x').count().values)

并且x列必须包含唯一值。

现在我不知道如何获得y_N列。

感谢。

1 个答案:

答案 0 :(得分:4)

您可以将pandas.crosstabcumcount列一起用作columns参数:

(pd.crosstab(df.x, df.groupby('x').cumcount() + 1, df.y, 
            aggfunc = lambda x: x.iloc[0])
   .rename(columns="y_{}".format).reset_index())

enter image description here