首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python - pandas groupby to flat DataFrame

python - pandas groupby to flat DataFrame
EN

Stack Overflow用户
提问于 2021-08-31 03:35:19
回答 2查看 69关注 0票数 1

我想将groupby结果转换为平面DataFrame。

代码语言:javascript
复制
import pandas
df1 = pandas.DataFrame( { 
    "x" : ["A", "B", "C", "A", "B" ,"B"] , 
    "y" : [ 1,   2,   3,   4,   5,   6]} )

g1 = df1.groupby(["x"]).max().reset_index()
print(g1)

预期输出DataFrame如下:

代码语言:javascript
复制
   x  y1 y2 y3
0  A  1  4  0
1  B  2  5  6
2  C  3  0  0

如果值不存在,则默认使用0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-31 03:43:47

尝试将groupby.aggadd_prefix配合使用,将fillnareset_index配合使用。

如下所示:

代码语言:javascript
复制
g1 = df1.groupby('x')['y'].agg(list).agg(pd.Series).add_prefix('y').fillna(0).reset_index()
print(g1)

或者,如果您关心列名,可以尝试在1 .__add__中以一种灵活的方式使用rename

代码语言:javascript
复制
g1 = df1.groupby('x')['y'].agg(list).agg(pd.Series).rename(1 .__add__, axis=1).add_prefix('y').fillna(0).reset_index()

输出:

代码语言:javascript
复制
   x   y1   y2   y3
0  A  1.0  4.0  0.0
1  B  2.0  5.0  6.0
2  C  3.0  0.0  0.0
票数 1
EN

Stack Overflow用户

发布于 2021-08-31 03:41:25

我们可以使用pivot_table索引是'x‘列,我们可以在x上使用groupby cumcount来枚举行,以获得新列1、2、3等的位置y值,并将fill_value设置为0,以设置缺少的默认值( fill_value优于fillna的优点是不引入NaN,因此dtype不会更改为浮点型)。

最后,add_prefix to columns和reset_index以匹配所需的输出:

代码语言:javascript
复制
out = (
    df1.pivot_table(index='x',
                    columns=df1.groupby('x').cumcount() + 1,
                    values='y',
                    fill_value=0)
        .add_prefix('y')
        .reset_index()
)

out

代码语言:javascript
复制
   x  y1  y2  y3
0  A   1   4   0
1  B   2   5   6
2  C   3   0   0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68992544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档