Python 如何将两个列表转换为一个数据帧,并将其中一个列表作为列表列表?
我从一个yml文件中获取数据,所以我可以得到两个列表,如下所示: 其中一个名为list_products的列表包含产品名称:Python 如何将两个列表转换为一个数据帧,并将其中一个列表作为列表列表?,python,pandas,list,dataframe,Python,Pandas,List,Dataframe,我从一个yml文件中获取数据,所以我可以得到两个列表,如下所示: 其中一个名为list_products的列表包含产品名称: ['ABCD' 'LTAP' 'DEFG' 'FFEE'] 另一个名为list_id的元素包含一个id列表,有时元素可以是一个列表: [[100, 200], [3333], [1500,99, 870], [2]] 当只使用列表ID时,我可以得到一个数据帧,这是我使用的代码: flat_list = [item for sublist in list_ids
['ABCD'
'LTAP'
'DEFG'
'FFEE']
另一个名为list_id的元素包含一个id列表,有时元素可以是一个列表:
[[100, 200],
[3333],
[1500,99, 870],
[2]]
当只使用列表ID时,我可以得到一个数据帧,这是我使用的代码:
flat_list = [item for sublist in list_ids for item in sublist]
id_df = pd.DataFrame(flat_list,columns=['id'])
结果是:
id
100
200
3333
1500
99
870
2
现在,我想要一个带有产品名称的数据框。我想得到这个:
id name
100 'ABCD'
200 'ABCD'
3333 'LTAP'
1500 'DEFG'
99 'DEFG'
870 'DEFG'
2 'FFEE'
试爆
试爆
您可以使用zip预处理数据,然后构建DF
names = ['ABCD', 'LTAP', 'DEFG', 'FFEE']
list_ids = [[100, 200], [3333], [1500, 99, 870], [2]]
flat_list = [(item, name) for sublist, name in zip(list_ids, names) for item in sublist]
id_df = pd.DataFrame(flat_list, columns=['id', 'name'])
中间平面列表为
或者使用原始数据构建df,然后使用explode
中间pd.DataFrame{'id':list_id,'name':names}为
您可以使用zip预处理数据,然后构建DF
names = ['ABCD', 'LTAP', 'DEFG', 'FFEE']
list_ids = [[100, 200], [3333], [1500, 99, 870], [2]]
flat_list = [(item, name) for sublist, name in zip(list_ids, names) for item in sublist]
id_df = pd.DataFrame(flat_list, columns=['id', 'name'])
中间平面列表为
或者使用原始数据构建df,然后使用explode
中间pd.DataFrame{'id':list_id,'name':names}为
如果您不想使用explode功能,因为它仅适用于>0.25的版本,则可以使用以下功能:
In [473]: d = {i : list_ids[c] for c, i in enumerate(named_list)}
In [474]: df_out = pd.DataFrame([(var, key) for (key, L) in d.items() for var in L], columns=['id', 'name'])
In [475] df_out
Out[475]:
id name
0 100 ABCD
1 200 ABCD
2 3333 LTAP
3 1500 DEFG
4 99 DEFG
5 870 DEFG
6 2 FFEE
如果您不想使用explode功能,因为它仅适用于>0.25的版本,则可以使用以下功能:
In [473]: d = {i : list_ids[c] for c, i in enumerate(named_list)}
In [474]: df_out = pd.DataFrame([(var, key) for (key, L) in d.items() for var in L], columns=['id', 'name'])
In [475] df_out
Out[475]:
id name
0 100 ABCD
1 200 ABCD
2 3333 LTAP
3 1500 DEFG
4 99 DEFG
5 870 DEFG
6 2 FFEE
id name
0 [100, 200] ABCD
1 [3333] LTAP
2 [1500, 99, 870] DEFG
3 [2] FFEE
In [473]: d = {i : list_ids[c] for c, i in enumerate(named_list)}
In [474]: df_out = pd.DataFrame([(var, key) for (key, L) in d.items() for var in L], columns=['id', 'name'])
In [475] df_out
Out[475]:
id name
0 100 ABCD
1 200 ABCD
2 3333 LTAP
3 1500 DEFG
4 99 DEFG
5 870 DEFG
6 2 FFEE