获取在熊猫数据框中为真的列的名称
假设我有以下熊猫数据框:
df = pd.DataFrame({'id': [1,2,3,4,5], 'a': [True, True, False, True, False], 'b': [False, True, False, False, True], 'c': [False, False, True, True, True]})
id a b c
1 True False False
2 True True False
3 False False True
4 True False True
5 False True True
我想,对于每个 id,获取 True 列的名称,最终的 dict 将是:
{1: ['a'], 2: ['a', 'b'], 3: ['c'], 4: ['a', 'c'], 5: ['b', 'c']}
我想也许可以通过用列名替换 True 并将它们聚合在一起,list但我无法想出解决方案。
编辑:如果 id 全部为 false,则只返回一个空列表。
回答
尝试melt然后groupby
out_d = df.melt('id').query('value').groupby('id')['variable'].agg(list).to_dict()
Out[127]: {1: ['a'], 2: ['a', 'b'], 3: ['c'], 4: ['a', 'c'], 5: ['b', 'c']}