我有一个数据框,我想在某些条件下提取数据。
我的数据框是这样的:
A B D
e1 r2 a
e8 r7 a
e2 r2 a..b
e5 e10 c
e8 e12 c..a
对于D
列(a,b,c)中的每个值,我想像这样从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
答案 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']]}