繁体   English   中英

如何拆分元组并将其保存到数据框

[英]How to split a tuple and save it to a dataframe

我有一个这样的元组列表:

a=[('A7855', 'item1', 'item2'),('A7856', 'item3', 'item4', 'item5')]

我想将该列表保存到数据框,如下所示:

No    ID     itemNum
1     A7855  item1
2            item2
3     A7856  item3
4            item4
5            item5

我该如何解决这个问题?

你也可以在这里使用melt ::

df=(pd.DataFrame(a).melt(0,value_name='itemNum').
drop('variable',1).dropna().sort_values(0).rename(columns={0:'ID'}).reset_index(drop=True))
print(df)

      ID itemNum
0  A7855   item1
1  A7855   item2
2  A7856   item3
3  A7856   item4
4  A7856   item5

为了满足您的确切要求,请在df

df.loc[df.duplicated('ID'),'ID']=''
df.insert(0,'No',range(1,len(df)+1))
print(df)

   No     ID itemNum
0   1  A7855   item1
1   2          item2
2   3  A7856   item3
3   4          item4
4   5          item5

将列表理解与DataFrame化一起使用,并循环所有值,而无需首先获取元组列表,然后将其传递给DataFrame构造函数:

b = [(x[0], y) for x in a for y in x[1:]]
df = pd.DataFrame(b, columns=['ID','itemNum'])
print (df)
      ID itemNum
0  A7855   item1
1  A7855   item2
2  A7856   item3
3  A7856   item4
4  A7856   item5

如果只需要ID列的第一个值,则添加带有枚举的if-else语句,以获取列表的计数器:

b = [(x[0], y) if i == 0 
               else ('', y) 
               for x in a for i, y in enumerate(x[1:])]
df = pd.DataFrame(b, columns=['ID','itemNum'])
print (df)
      ID itemNum
0  A7855   item1
1          item2
2  A7856   item3
3          item4
4          item5

并且如果需要新列,则No添加DataFrame.insert以添加索引值+ 1的第一个新列:

df.insert(0, 'No', df.index + 1)
print (df)
   No     ID itemNum
0   1  A7855   item1
1   2          item2
2   3  A7856   item3
3   4          item4
4   5          item5

我建议您使用多个变量分配。 在第一个元组之后的所有元组变量都将进入“ itemnum”。

data=[('A7855', 'item1', 'item2'),('A7856', 'item3', 'item4', 'item5')]
rows = []
ids = set()
for idx, *itemnum in data:
    for i in itemnum:
        if idx in ids:
            idx = ''
        rows.append((idx, i))
        ids.add(idx)
df = pd.DataFrame(rows, columns=['ID','itemNum'])
df.index = [i+1 for i in df.index]

我的输出:

      ID itemNum
1  A7855   item1
2          item2
3  A7856   item3
4          item4
5          item5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM