Pandas: GroupBy to DataFrame
有一个非常流行的S.O.问题关于GroupBy到DataFrame,请参见此处。不幸的是,我不认为这个特定的用例是最有用的。
假设您有一个扁平形式的分层数据集:
例如
1 2 3 4 5 | key val 0 'a' 2 1 'a' 1 2 'b' 3 3 'b' 4 |
我要做的是将该数据帧转换为此结构
1 2 3 | 'a' 'b' 0 2 3 1 1 4 |
我以为这会像
1 | pd.DataFrame(df.groupby('key').groups) |
但事实并非如此。
那么,我如何才能实现这一转变呢?
1 2 3 4 5 6 | df.assign(index=df.groupby('key').cumcount()).pivot('index','key','val') Out[369]: key 'a' 'b' index 0 2 3 1 1 4 |
下面的方法怎么样?
1 2 3 4 5 | In [134]: pd.DataFrame(df.set_index('val').groupby('key').groups) Out[134]: a b 0 2 3 1 1 4 |
认为这应该有效。注意,这个例子与op的不同。这个例子中有重复的。
1 2 3 | df = pd.DataFrame({'key': {0:"'a'", 1:"'a'", 2:"'b'", 3:"'b'", 4:"'a' <hr><P>让我们用<wyn>set_index</wyn>和<wyn>unstack</wyn>与<wyn>cumcount</wyn>一起使用:</P>[cc lang="python"]df.set_index([df.groupby('key').cumcount(),'key'])['val']\ .unstack().rename_axis(None,1) |
输出:
1 2 3 | 'a' 'b' 0 2 3 1 1 4 |
我对熊猫不熟悉,但这似乎很管用:
1 2 3 4 5 6 | gb = df.groupby('key') k = 'val' pd.DataFrame( [gb.get_group(x)[k].tolist() for x in gb.groups], index=[x for x in gb.groups] ).transpose() |