亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號