Свести список списка в python, а также создать различные enet кадры данных - PullRequest
0 голосов
/ 06 января 2020

У меня есть данные

# создать некоторые данные с помощью столбца Имена data = pd.DataFrame ({'Names': ['Joe', 'John', 'Jasper', 'Jez'] * 4 , 'Add': ['Lo', 'Po', 'Fa',
'It'] * 4, 'Ob1': np.random.rand (16), 'Ob2': np.random.rand (16)})

enter image description here

и создали список с подмножествами данных (только с именами, которые я хочу), используя другой фрейм данных в качестве карты

import pandas as pd

#Mapping file
data2 = pd.DataFrame({
  "Names": ["Joe", "John"],
   "Add": ["Lo", "Po"]})

tuples = [tuple(x) for x in data2.values]
my_dfs = [data[(data['Names'] == mytuple[0]) & (data['Add'] == mytuple[1])] for mytuple in    
tuples]
for my_df in my_dfs:
    print(my_df)

и я получаю следующий вывод:

    [ Names Add   Ob1   Ob2
    Joe  Lo 0.999 0.403
    Joe  Lo 0.509 0.570
    Joe  Lo 0.180 0.775
    Joe  Lo 0.010 0.591

    Names Add   Ob1   Ob2
    John  Po 0.040 0.256
    John  Po 0.673 0.869
    John  Po 0.915 0.593
    John  Po 0.865 0.298 ]

"my_dfs" - это список списка. Возможно ли это:

i. Чтобы создать фрейм данных, свернув приведенный выше список и выясните, как это лучше всего сделать. Попробовал следующее, но не дает правильного вывода:

flattened_list = []
for x in my_dfs:
    flattened_list.append(x)  

, где будет выглядеть окончательный вывод:

   Names Add   Ob1   Ob2
    Joe  Lo 0.999 0.403
    Joe  Lo 0.509 0.570
    Joe  Lo 0.180 0.775
    Joe  Lo 0.010 0.591
    John  Po 0.040 0.256
    John  Po 0.673 0.869
    John  Po 0.915 0.593
    John  Po 0.865 0.298

без заголовков, появляющихся дважды

ii , Для создания разных фреймов данных (2 фрейма в данном случае, один для Джо, другой для Джона.

Joe:

Names Add   Ob1   Ob2
    Joe  Lo 0.999 0.403
    Joe  Lo 0.509 0.570
    Joe  Lo 0.180 0.775
    Joe  Lo 0.010 0.591

John:   

    Names Add   Ob1   Ob2
    John  Po 0.040 0.256
    John  Po 0.673 0.869
    John  Po 0.915 0.593
    John  Po 0.865 0.298

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 06 января 2020

вы можете использовать pandas concat function для объединения ваших фреймов данных.

Если вы предпочитаете использовать python списки, вы хотите использовать функцию списков extend, а не append:

flattened_list = []
for x in my_dfs:
    flattened_list.extend(x)

extend добавляет элементы списка в ваш список, тогда как append просто добавит сам список в ваш список flattened_list (вы можете прочитать об этом подробнее здесь

Также обратите внимание, что кажется, что ваши списки содержат заголовки поэтому, если вам нужны только значения, вы можете использовать python x[n:], чтобы получить только элементы после n:

flattened_list = []
for x in my_dfs:
    flattened_list.extend(x[1:])
...