Converting a pandas crosstab into a stacked dataframe (a regular table)

假如想象 提交于 2019-12-06 04:31:52

You can just do stack

df[df.astype(bool)].stack().reset_index().drop(0,1)

The following produces the desired outcome.

def crosstab2stacked(crosstab):
    stacked = crosstab.stack(dropna=True).reset_index()
    stacked = stacked[stacked.replace(0,np.nan)[0].notnull()].drop(columns=[0])
    return stacked

# Make original dataframe
original_stacked_df = _create_df()
# Make crosstab dataframe
crosstab_df = pd.crosstab(original_stacked_df['ID'], 
                          original_stacked_df['Label']).reindex()
# Recontruct stacked dataframe
recon_stacked_df = crosstab2stacked(crosstab = crosstab_df)

Check if original == reconstructed:

np.alltrue(original_stacked_df == recon_stacked_df)

Output: True

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!