重新格式化数据 - 将列表中的每个值赋予它自己的行,同时保留列表的 ID

数据挖掘 Python 数据清理
2022-02-22 09:17:56

我正在寻找重新格式化一些数据。它目前看起来像这样:

Site_ID Section_ID 1, “A100/2020, B100/1001, C130/2000” 2, “A100/2021, ZW00/2002, W300/0999” 3, “A100/2022, TS100/4000, RW100/0000”

以此为例,以下是我想要实现的格式: 在此处输入图像描述

所以列表中的每个元素都有自己的行,但保留了原始的 site_ID。Python 中的解决方案将是理想的,因为这是我目前唯一熟悉的语言。

1个回答

您可以将 split 与 iterrows 一起使用:

import pandas as pd
df = pd.DataFrame([{'Site_ID': 1, 'Section_ID': 'a,b,c'},
               {'Site_ID': 2, 'Section_ID': 'd,e,f'}])

df

  Site_ID   Section_ID  
0   1   a,b,c  
1   2   d,e,f  

pd.concat([pd.Series( row['Site_ID'], row['Section_ID'].split(',') ) for _, row in df.iterrows()])

a    1  
b    1  
c    1  
d    2  
e    2  
f    2  

iterrows 逐行遍历系列,split 将在以逗号分隔的字符串中找到单独的值。

如果您想要返回列名,您可以转换回数据框:

import numpy as np  
df1 = pd.DataFrame(np.array(pd.concat([pd.Series( row['Site_ID'], row['Section_ID'].split(',') ) for _, row in df.iterrows()]).reset_index()), columns=['Site_ID','Section_ID'])  

df1

 Site_ID Section_ID
0   a   1
1   b   1
2   c   1
3   d   2
4   e   2
5   f   2