Как извлечь строки из pandas dataframe в виде списков списков, основанных на наборе символов в столбце? - PullRequest
0 голосов
/ 28 января 2019

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

 A  B   D
e1  r2  a
e8  r7  a
e2  r2  a..b
e5  e10 c
e8  e12 c..a

Для каждого значения в столбце D (a, b,в) Я хотел бы получить значения из A и B следующим образом:

a : [[e1, r2], [e8, r7], [e2,r2], [e8, e12]]
b : [[e2, r2]]
c : [[e5, e10], [e8, e12]]
....

Это то, что я пробовал, но я не знаю, как извлечь столбцы A иB.

df
l = ['a','b','c']
list_elements = {}
for i in l:
    liste_e = []
        for e in df['d']:
        if i.upper() in e:
            liste_e.append([e1, r2])
        ## extract a : [[e1, r2], [e8, r7], [e2,r2], [e8, e12]]

        list_elements[i] = liste_e

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы также можете создать dict с пустыми списками в качестве значений и добавить к нему

l = ['a','b','c']
dic = dict([(key, []) for key in l])
for i in l:
    value = df.D.str.contains(i)
    dic[i].append(df.loc[value, ['A', 'B']].values)
0 голосов
/ 28 января 2019

Вы можете использовать .str.contains, чтобы получить логические маски для каждой предопределенной буквы, получить соответствующие части столбцов A и B, используя .loc, и преобразовать в список списков. те части фрейма данных, которые мы получили на предыдущем шаге.

Ваш фрейм данных:

>>> import pandas as pd
>>> df = pd.DataFrame(dict(A=['e1', 'e8', 'e2', 'e5', 'e8'],
                           B=['r2', 'r7', 'r2', 'e10', 'e12'],
                           D=['a', 'a', 'a..b', 'c', 'c..a']))
>>> df
     A  B   D
0   e1  r2  a
1   e8  r7  a
2   e2  r2  a..b
3   e5  e10 c
4   e8  e12 c..a

затем

>>> letters = ['a', 'b', 'c']
>>> lists = {}
>>> for letter in letters:
        mask = df['D'].str.contains(letter)
        lists[letter] = df.loc[mask, ['A', 'B']].values.tolist()
>>> lists
{'a': [['e1', 'r2'], ['e8', 'r7'], ['e2', 'r2'], ['e8', 'e12']],
 'b': [['e2', 'r2']],
 'c': [['e5', 'e10'], ['e8', 'e12']]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...