Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于数据帧列之间的条件生成列名字典_Python_Pandas_Dataframe_Dictionary - Fatal编程技术网

Python 基于数据帧列之间的条件生成列名字典

Python 基于数据帧列之间的条件生成列名字典,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我有以下数据框: a_11 b_14 c_13 d_12 AC True False False False BA True False False True AA False False False False 我想要一个以键

我有以下数据框:

                        a_11        b_14    c_13     d_12
AC                      True        False   False   False 
BA                      True        False   False   True
AA                      False       False   False   False 
我想要一个以键作为索引,以值作为具有真值的列名列表的字典

{
AC : [a_11],
BA : [a_11,d_12],
AA : []
}
我该如何处理这个问题呢


编辑:列名是字符串,而不是字符。如果性能对转置DataFrame和将列名转换为列表很重要,请使用词汇理解:

d = {k: v.index[v].tolist() for k, v in df.T.items()}
print (d)
{'AC': ['a_11'], 'BA': ['a_11', 'd_12'], 'AA': []}
另一个想法是使用
zip
并通过以下方式将值转换为2d numpy数组:

您可以使用此处将
df
df.columns
相乘,然后使用筛选空字符串
'

您可以在这里使用列表理解

d = {k: df.columns[v].tolist() for k, v in zip(df.index, df.to_numpy())}
print (d)
{'AC': ['a_11'], 'BA': ['a_11', 'd_12'], 'AA': []}
out = df.mul(df.columns).agg(lambda x:[*filter(None, x)], axis=1)

AC          [a_11]
BA    [a_11, d_12]
AA              []
dtype: object
vals = [df.columns[m].tolist() for m in df.values]
# vals -> [['a_11'], ['a_11', 'd_12'], []]
pd.Series(vals, index=df.index)

AC          [a_11]
BA    [a_11, d_12]
AA              []
dtype: object