获取在熊猫数据框中为真的列的名称

假设我有以下熊猫数据框:

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


以上是获取在熊猫数据框中为真的列的名称的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>