关于以下熊猫数据框,
idx = pd.MultiIndex.from_product([['A001', 'B001','C001'],
['0', '1', '2']],
names=['ID', 'Entries'])
col = ['A', 'B']
df = pd.DataFrame('-', idx, col)
df.loc['A001', 'A'] = [10,10,10]
df.loc['A001', 'B'] = [90,84,70]
df.loc['B001', 'A'] = [10,20,30]
df.loc['B001', 'B'] = [70,86,67]
df.loc['C001', 'A'] = [20,20,20]
df.loc['C001', 'B'] = [98,81,72]
df.loc['D001', 'A'] = [20,20,10]
df.loc['D001', 'B'] = [68,71,92]
#df is a dataframe
df
我很想知道Id,这些Id在其“ A”列中包含来自集合或列表的所有值。让我们定义一个值为[10,20]的列表。在这种情况下,我应该获得位置“ B001”和“ D001”作为答案,因为这两个位置的“ A”列中都提到了列表中的值。您还可以建议一个更快的实现,因为我必须处理非常大的数据集。
您可以set.intersection
用于计算,并pd.Index.get_level_values
提取索引的第一级:
search = {10, 20}
idx = (set(df[df['A'] == i].index.get_level_values(0)) for i in search)
res = set.intersection(*idx)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句