亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pandas:如果變量為真,則返回特征名稱

Pandas:如果變量為真,則返回特征名稱

慕工程0101907 2021-10-26 16:46:45
我有一個 ~2M 個字符串的列表和一個 ~800 個單詞的列表。我創建了一個數據框,其中字符串作為行,單詞作為列。除了字符串變量之外,所有其他變量都是真值或假值,對應于單詞是否在字符串中。沒有缺失值。IEimport pandas as pddf = pd.DataFrame({'strings':['a string with california',                               'a string with lobster',                               'a str with california and lobster'],                         'california':[True,False,True],                         'lobster':[False,True,True],                         'string':[True,True,False],})因為數據框太長太寬而無法一次查看,我想要一個變量來列出具有該特定行真實值的列名。例如,df_filtered = pd.DataFrame({'strings':['a string with california',                               'a string with lobster',                               'a str with california and lobster'],                   'matches':[['string','california'],                              ['string', 'lobster'],                              ['california', 'lobster']],                         'california':[True,False,True],                         'lobster':[False,True,True],                         'string':[True,True,False],})我是 Pandas 的新手,并且發現我可以使用以下命令創建一個包含缺失值的列名列表columns_w_na = df.columns[df.isnull().any()].tolist()有沒有一種方法可以為每一行類似地捕獲具有特定值的列的名稱并將其表示為列表?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

你可能想檢查


df.eq(True).dot(df.columns+',').str[:-1].str.split()

0     [california,string]

1        [lobster,string]

2    [california,lobster]

dtype: object


查看完整回答
反對 回復 2021-10-26
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

使用apply與lambda表達式:


# setting axis=1 in apply means you are looking across rows

df['new'] = df.apply(lambda x: df.columns[x == True].values, axis=1)


                             strings  california  lobster  string  \

0           a string with california        True    False    True   

1              a string with lobster       False     True    True   

2  a str with california and lobster        True     True   False   


                     new  

0   [california, string]  

1      [lobster, string]  

2  [california, lobster]  


查看完整回答
反對 回復 2021-10-26
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

上面的一個響應很好地創建了一個由逗號分隔的匹配項的括號字符串,這非常有幫助。我隨后遇到了一個問題,我需要計算匹配短語的數量,這使得將列置于列表類型而不是字符串中更有幫助。


df['matches'] = df.eq(True).dot(df.columns+',').str[:-1].str.split(',')

df['num_matches'] = df['matches'].str.len()


查看完整回答
反對 回復 2021-10-26
  • 3 回答
  • 0 關注
  • 253 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號