Python 拆分行和列

python splitting the rows and columns

提问人:David Jackson 提问时间:2/9/2020 最后编辑:David Jackson 更新时间:2/25/2020 访问量:97

问:

我是使用 python 的完全新手 我正在使用一个数据框,其中一行需要拆分为两行。 除一列外,两行将具有相同的数据

Python Pandas 数据帧

评论

0赞 AMC 2/9/2020
请分享一个最小的可重复示例。您至少可以以一种易于其他人帮助您的格式提供数据。你也没有解释具体问题是什么,你尝试了什么,等等。

答:

3赞 Sergey Bushmanov 2/9/2020 #1

假设我们有一个 df:

df
   Column1 Column2 Column3
0        1      A1      A2
1        2      B1      B2

然后我们可以做:

df["Column4"] = df.apply(lambda x: [x[1],x[2]], axis=1)
df = df.explode("Column4")
print(df)

   Column1 Column2 Column3 Column4
0        1      A1      A2      A1
0        1      A1      A2      A2
1        2      B1      B2      B1
1        2      B1      B2      B2

如果内容是一个问题,我们可以更进一步:Column1

df["Column1"] = range(1, df.shape[0]+1)
print(df)

   Column1 Column2 Column3 Column4
0        1      A1      A2      A1
0        2      A1      A2      A2
1        3      B1      B2      B1
1        4      B1      B2      B2

评论

0赞 David Jackson 2/9/2020
如果我执行一次代码,它很好,如果执行多次,它会产生双倍的结果
0赞 Sergey Bushmanov 2/9/2020
@Himavari原因,它应该运行一次,因为在执行过程中发生了突变。如果你想再次运行它,你需要从头开始,并按照OP中给出的方式重新定义你。dfdf
2赞 anky 2/9/2020 #2

这是另一种不使用 df.stack 、 series.dropleveldf.join 的方法:apply

m = df.set_index('Column1')
m = m.join(m.stack().droplevel(1).to_frame('Column4')).reset_index()

print(m)

   Column1 Column2 Column3 Column4
0        1      A1      A2      A1
1        1      A1      A2      A2
2        2      B1      B2      B1
3        2      B1      B2      B2
1赞 ansev 2/9/2020 #3

另一种方法:

new_df = (df.reindex(df.index.repeat(len(df.columns)-1))
            .assign(Column4 = df[df.columns.difference(['Column1'])].stack().values))
print(new_df)
   Column1 Column2 Column3 Column4
0        1      A1      A2      A1
0        1      A1      A2      A2
1        2      B1      B2      B1
1        2      B1      B2      B2