Мне нужно выполнить приведенное ниже преобразование данных для произвольного числа «элементов», используя Python. Первые два столбца всегда одинаковы, тогда могут быть тысячи столбцов "itemN", и я хотел бы, чтобы все действительные значения были в новом отдельном столбце.
Я попытался использовать pandas. wide_to_long, но, насколько мне известно, я бы поместил новое имя в транспонированную таблицу, которая не сработала бы, если бы количество элементов могло измениться.
type rid item1 item2 item3
apple [81] 1.1 1.1 1.1
orange [82] 2.2 2.2 2.2
banana [41,42,43,52] 3.3 3.3 3.3
kiwi [90,95] 4.4 4.4 4.4
на
type rid gid value
apple [81] item1 1.1
apple [81] item2 1.1
apple [81] item3 1.1
orange [82] item1 2.2
orange [82] item2 2.2
orange [82] item3 2.2
banana [41,42,43,52] item1 3.3
banana [41,42,43,52] item2 3.3
banana [41,42,43,52] item3 3.3
kiwi [90,95] item1 4.4
kiwi [90,95] item2 4.4
kiwi [90,95] item3 4.4
Итак До сих пор я пытался использовать double для l oop и нарезку индекса с массивами numpy и использовать pandas .wide_to_long.
a = np.array([['apple' ,tuple([81]) ,1.1 ,1.1 ,1.1] ,['orange' ,tuple([82]) ,2.2 ,2.2 ,2.2],['banana' ,tuple([41,42,43,52]) ,3.3 ,3.3 ,3.3],['kiwi' ,tuple([90,95]) ,4.4 ,4.4 ,4.4]])
names = ['type' ,'rid' ,'item1' ,'item2' ,'item3']
df = pd.DataFrame(a,columns=names)