Используйте понимание списка со сглаживанием и зациклите все значения без первого для списка кортежей, затем передайте его конструктору 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