为了账号安全,请及时绑定邮箱和手机立即绑定

如何沿行压缩或堆叠熊猫数据框?

如何沿行压缩或堆叠熊猫数据框?

湖上湖 2021-08-14 21:38:39
我有一个包含多列的大熊猫数据框,但是让我们关注两个:df = pd.DataFrame([['hey how are you', 'fine thanks',1],                     ['good to know', 'yes, and you',2],                    ['I am fine','ok',3],                    ['see you','bye!',4]],columns=list('ABC'))df出去:    A                   B           C0   hey how are you     fine thanks 11   good to know    yes, and you    22   I am fine             ok        33   see you             bye!        4从前面的数据框中,我如何将两个特定的列压缩成一个单独的 Pandas 数据框来执行其他列的值?例如:    A                C0   hey how are you  11   fine thanks      12   good to know     23   yes, and you     24   I am fine        35   ok               36   see you          47   bye!             4我试过了:df = df['A'].stack()df = df.groupby(level=0)df但是,它不起作用。知道如何实现新格式吗?
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

这将删除列名,但完成工作:


import pandas as pd


df = pd.DataFrame([['hey how are you', 'fine thanks'], 

                    ['good to know', 'yes, and you'],

                    ['I am fine','ok'],

                    ['see you','bye!']],columns=list('AB'))


df.stack().reset_index(drop=True)


0    hey how are you

1        fine thanks

2       good to know

3       yes, and you

4          I am fine

5                 ok

6            see you

7               bye!

dtype: object

默认堆栈行为保留列名:


df.stack()


0  A    hey how are you

   B        fine thanks

1  A       good to know

   B       yes, and you

2  A          I am fine

   B                 ok

3  A            see you

   B               bye!

dtype: object

如果您有更多列,您可以选择要堆叠的列,只需使用列索引:


df[["A", "B"]].stack()

使用额外的列,事情变得棘手,您需要通过降低一级(包含列)来对齐索引:


df["C"] = range(4)


stacked = df[["A", "B"]].stack()

stacked.index = stacked.index.droplevel(level=1)


stacked


0    hey how are you

0        fine thanks

1       good to know

1       yes, and you

2          I am fine

2                 ok

3            see you

3               bye!

dtype: object

现在我们可以连接C列:


pd.concat([stacked, df["C"]], axis=1)


                 0  C

0  hey how are you  0

0      fine thanks  0

1     good to know  1

1     yes, and you  1

2        I am fine  2

2               ok  2

3          see you  3

3             bye!  3


查看完整回答
反对 回复 2021-08-14
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您可能正在寻找的是pandas.concat.

它接受“Series、DataFrame 或 Panel 对象的序列或映射”,因此您可以传递选择列listDataFrame对象(将pd.Series在为单个列编制索引时)。

df3 = pd.concat([df['A'], df['B']])


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信