簡體   English   中英

根據數據框列之間的條件生成列名字典

[英]Generating a dictionary of column names based on a condition among columns of a dataframe

我有以下數據框:

                        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並通過DataFrame.to_numpy將值轉換為二維 numpy 數組:

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

您可以在此處使用df.muldfdf.columns相乘,然后使用df.agg過濾掉空字符串''

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM