如何基于列中的一组字符将大熊猫数据帧的行提取为列表列表?

时间:2019-01-28 10:21:36

标签: python pandas dataframe

我有一个数据框,我想在某些条件下提取数据。
我的数据框是这样的:

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

对于D列(a,b,c)中的每个值,我想像这样从AB中获取值:

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

这是我尝试过的方法,但是我不知道如何提取列AB

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 :(得分:1)

您还可以创建一个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)

答案 1 :(得分:0)

您可以使用.str.contains获取每个预定义字母的布尔掩码,使用A获取B.loc列的相应部分,并使用convert to list of lists我们在上一步中获得的部分数据框。

您的数据框:

>>> 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']]}