回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个数据帧:</p>
<pre><code>In [1]: df = DataFrame({'A': [1, 1, 2, 2, 2],
'B': ['AF', 'PLAT', 'AF', 'PLAT', 'ROOT'],
'C': [.0015, .0018, .0021, .0011, .0008] })
In [2]: df
Out[2]:
A B C
0 1 AF 0.0015
1 1 PLAT 0.0018
2 2 AF 0.0021
3 2 PLAT 0.0011
4 2 ROOT 0.0008
</code></pre>
<p>我想得到所有<code>A</code>的列表,它们在<code>B</code>中至少有一个'AF'、'PLAT'和'ROOT'。根据该条件,只返回<code>A</code>==2,因为<code>A</code>==1不包含“ROOT”。你知道吗</p>
<p>这样做有效:</p>
<pre><code>In [128]: gbdict = df.groupby(['A', 'B']).count().to_dict()['C']
In [129]: gbdict
Out[129]:
{(1L, 'AF'): 1,
(1L, 'PLAT'): 1,
(2L, 'AF'): 1,
(2L, 'PLAT'): 1,
(2L, 'ROOT'): 1}
In [130]: features = dict()
...: for k in gbdict:
...: features.setdefault(k[0], []).append(k[1])
In [131]: features
Out[131]: {1L: ['PLAT', 'AF'], 2L: ['AF', 'PLAT', 'ROOT']}
In [132]: alist = [k for k, v in features.items() if ('AF' in v and 'PLAT' in v and 'ROOT' in v)]
In [133]: alist
Out[133]: [2L]
</code></pre>
<p>但一定有更重要的东西</p>