pandas将group by和rows组合成列

问题描述 投票:1回答:2

我正在尝试转换此数据集:

A   B   C
1   x1  a
1   x1  a
1   x1  b
2   x2  b
2   x2  a

成:

A   B   C1  C2  C3
1   x1  a   a   b
2   x2  b   a   null

df = pd.DataFrame({ 'A': [1, 1, 1, 2, 2],
                'B': ['x1', 'x1', 'x1', 'x2', 'x2'],
                'C': ['a', 'a', 'b', 'b', 'a']
                })

这里的答案在某种程度上是接近的,但枢轴对我来说并不适用。 How to do a transpose a dataframe group by key on pandas?

python pandas
2个回答
1
投票

使用groupby + apply -

v = df.groupby(['A' ,'B']).C.apply(lambda x: x.tolist())

df = pd.DataFrame(v.tolist(), index=v.index)\
       .rename(columns=lambda x: x + 1)\
       .add_prefix('C')\
       .reset_index()
df

   A   B C1 C2    C3
0  1  x1  a  a     b
1  2  x2  b  a  None

1
投票

你可以使用set_indexunstack

In [196]: (df.set_index(['A', 'B', df.groupby(['A', 'B']).cumcount()+1])['C']
             .unstack()
             .add_prefix('C')
             .reset_index())
Out[196]:
   A   B C1 C2    C3
0  1  x1  a  a     b
1  2  x2  b  a  None
© www.soinside.com 2019 - 2024. All rights reserved.