python pandas dataframe拆分行(某些行一行拆成多行)

发布于 2022-09-07 19:40:40 字数 331 浏览 13 评论 0

比如有数据

A B C
1 1,2 3
2 3 3
3 4,5,6 3

这样一张表,要按B将他拆分为:
A B C
1 1 3
1 2 3
2 3 3
3 4 3
1 5 3
1 6 3
请问该如何操作

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

隔岸观火 2022-09-14 19:40:40

简单循环

最简单的方式就是循环拆分一下呗。先上最简单方法:

import pandas as pd
df = pd.DataFrame({'A':['1','2','3'],'B':['1','2,3','4,5,6'],'C':['3','3','3']})
result = pd.DataFrame(columns=['A','B','C'])
print(df,'\n')
for i in df.itertuples():
    for j in i[2].split(','):
        result = result.append({'A':i[1],'B':j,'C':i[3]},ignore_index=True)        
print(result)

输出:

   A      B  C
0  1      1  3
1  2    2,3  3
2  3  4,5,6  3 

   A  B  C
0  1  1  3
1  2  2  3
2  2  3  3
3  3  4  3
4  3  5  3
5  3  6  3

更高效的方法

采用expand直接进行扩展

df = pd.DataFrame({'A':['1','2','3'],'B':['1','2,3','4,5,6'],'C':['3','3','3']})
df = (df.set_index(['A','C'])['B']
       .str.split(',', expand=True)
       .stack()
       .reset_index(level=2, drop=True)
       .reset_index(name='B'))
print(df)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文