3 回答

TA貢獻1815條經驗 獲得超6個贊
在鏈接的問題中,性能更高的解決方案是:
df.apply(lambda row: row.value_counts(dropna=False), axis=1).fillna(0)
這可能已經足以滿足您的目的;但是,如果您只需要幾個值,則可能會更快:
counts = pd.Series({(df == key).values.sum() for key in ['yes_1', 'no_51']})

TA貢獻1802條經驗 獲得超5個贊
我不知道它是否比你的技術更好,但我建議將其作為測試的解決方案:
(
pd
.melt(df,id_vars=['ID'])
.assign(yes_1 = lambda x: np.where(x['value']=='yes_1',1,0))
.assign(no_51 = lambda x: np.where(x['value']=='no_51',1,0))
.sum()
)

TA貢獻1829條經驗 獲得超6個贊
df.set_index('ID', inplace=True)#Set ID as index
df[~df.isin(['yes_1', 'no_51'])] = np.nan#Set anything not in the set as nan
pd.get_dummies(df.stack().unstack())#get dummies from a datframe that has dropped anycolumns with NaNS
class1_yes_1 class3_no_51 class3_yes_1
ID
xyz_1 1 0 0
xyz_2 0 1 0
xyz_3 0 0 1
添加回答
舉報