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

我有一个包含多列的大熊猫数据框,但是让我们关注两个:


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           C

0   hey how are you     fine thanks 1

1   good to know    yes, and you    2

2   I am fine             ok        3

3   see you             bye!        4

从前面的数据框中,我如何将两个特定的列压缩成一个单独的 Pandas 数据框来执行其他列的值?例如:


    A                C

0   hey how are you  1

1   fine thanks      1

2   good to know     2

3   yes, and you     2

4   I am fine        3

5   ok               3

6   see you          4

7   bye!             4

我试过了:


df = df['A'].stack()

df = df.groupby(level=0)

df

但是,它不起作用。知道如何实现新格式吗?


湖上湖
浏览 183回答 3
3回答

慕后森

这将删除列名,但完成工作:import pandas as pddf = 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 you1        fine thanks2       good to know3       yes, and you4          I am fine5                 ok6            see you7               bye!dtype: object默认堆栈行为保留列名:df.stack()0  A    hey how are you   B        fine thanks1  A       good to know   B       yes, and you2  A          I am fine   B                 ok3  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)stacked0    hey how are you0        fine thanks1       good to know1       yes, and you2          I am fine2                 ok3            see you3               bye!dtype: object现在我们可以连接C列:pd.concat([stacked, df["C"]], axis=1)                 0  C0  hey how are you  00      fine thanks  01     good to know  11     yes, and you  12        I am fine  22               ok  23          see you  33             bye!  3

白衣染霜花

您可能正在寻找的是pandas.concat.它接受“Series、DataFrame 或 Panel 对象的序列或映射”,因此您可以传递选择列list的DataFrame对象(将pd.Series在为单个列编制索引时)。df3 = pd.concat([df['A'], df['B']])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python