Python - Как распаковать список списка кортежей в кадре данных - PullRequest
0 голосов
/ 09 июля 2019

У меня есть датафрейм, и в одном столбце содержится список списков кортежей.Я хочу распаковать этот список списков кортежей в N строк в кадре данных, где N - длина списка списков кортежей.Я пытался использовать решение из другой связанной темы, но я не могу сделать это для моей проблемы

   import pandas as pd
   import numpy as np

 index       element              Lanes   Category
   0     [[(A, A), (B, B)],         M      1
         [(B, B), (C, C)]]

   1     [[(A, A), (D, D)],         B      2
         [(D, D), (L, L)],
         [(L, L), (O, O)]]

Учитывая этот входной фрейм данных, как мне преобразовать это в длинный формат, что приводит к: -

   index       element           Lanes   Category
   0      (A, A), (B, B)          M       1
   1      (B, B), (C, C)          M       1

   2      (A, A), (D, D)          B       2
   3      (D, D), (L, L)          B       2
   4      (L, L), (O, O)          B       2   

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Вот альтернативный способ -

import pandas as pd
import numpy as np

d = {'element' : pd.Series([[[('A', 'A'), ('B', 'B')],[('B', 'B'), ('C', 'C')]],[[('A', 'A'), ('D', 'D')],[('D', 'D'), ('L', 'L')],[('L', 'L'), ('O', 'O')]]]),
      'Lanes' : pd.Series(['M','B']),
      'Category' : pd.Series([1,2])}

# creates Dataframe.
df = pd.DataFrame(d)

# print the data.
print(df)

df1=df.element.apply(pd.Series)\
      .merge(df, right_index = True, left_index = True)\
      .drop(["element"], axis = 1) \
      .melt(id_vars = ['Lanes', 'Category'], value_name = "element")\
      .drop("variable", axis = 1)\
      .dropna()\
      .reset_index(drop=True)

print(df1)
1 голос
/ 09 июля 2019

Вот один из способов адаптации @ ответа WenYoBen :

lens = df.element.str.len()
pd.DataFrame({'element': sum(df.element.tolist(),[]),
            'Category': df.Category.repeat(lens).values,
             'Lanes': df.Lanes.repeat(lens).values})

        element         Category Lanes
0  [(A, A), (B, B)]         1     M
1  [(B, B), (C, C)]         1     M
2  [(A, A), (D, D)]         2     B
3  [(D, D), (L, L)]         2     B
4  [(L, L), (O, O)]         2     B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...