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

Python:从列表创建数据框,其中每个新行都从特定的列表索引开始

Python:从列表创建数据框,其中每个新行都从特定的列表索引开始

阿晨1998 2023-03-08 16:30:37
我有一个列表,其中“SUMMARY”元素和下一个元素之间的项目数不固定list = ['SUMMARY - Dec 2013', 'Person1', 'None', 'None', '10', 'SUMMARY - Dec 2013', 'Person2', '20', 'SUMMARY - Jan 2014', 'Person3', 'None']我想要实现的是将列表转换为数据框,其中每一行都以“SUMMARY”元素开头。我用过match = []match.append([n for n, l in enumerate(list) if l.startswith('SUMMARY')])使用输出[[0, 5, 8]]获取包含“SUMMARY”的项目的索引,我希望我的数据框的每一行都以其索引包含在match. 在这种情况下,匹配有 3 个元素,所以我希望我的数据框有 3 行和以下结构:'SUMMARY - Dec 2013', 'Person1', 'None', 'None', '10''SUMMARY - Dec 2013', 'Person2', '20',   NA,    NA'SUMMARY - Jan 2014', 'Person3', 'None', NA,    NA基本上,当特定行的项目数小于最大列数时,其余部分将填充 NA/NaN。
查看完整描述

1 回答

?
芜湖不芜

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

如果您从单个系列开始,则更容易解决这个问题。您可以根据“摘要”是否存在对数据行进行分组,然后使用它来跨列聚合和重新分解数据。


s = pd.Series(your_list)

pd.DataFrame(s.groupby(s.str.contains('summary', case=False).cumsum())

              .agg(list)

              .tolist())                                                   


                    0        1     2     3     4

0  SUMMARY - Dec 2013  Person1  None  None    10

1  SUMMARY - Dec 2013  Person2    20  None  None

2  SUMMARY - Jan 2014  Person3  None  None  None

感谢@Shubham Sharma 提出迭代组的建议:


pd.DataFrame([g.tolist() for k, g in s.groupby(

    s.str.contains('summary', case=False).cumsum())])


                    0        1     2     3     4

0  SUMMARY - Dec 2013  Person1  None  None    10

1  SUMMARY - Dec 2013  Person2    20  None  None

2  SUMMARY - Jan 2014  Person3  None  None  None


查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号