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