"取消融化 "Dataframe并保留其余列?蟒蛇潘达

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了"取消融化 "Dataframe并保留其余列?蟒蛇潘达相关的知识,希望对你有一定的参考价值。

我有一个这样格式的表,我想用融化的 "反面 "来转换。还有一个问题是解决这个问题的,但是我想保留这么多其他的列就不行了。

原文是这样的。

COUNTRY   STATE     CATEGORY   RESTAURANT         STARS     REVIEWS
US        Texas     NaN        Texas Chicken      4.1       1,157    
US        Texas     Spicy      Texas Chicken      4.1       1,157
US        Ohio      NaN        Mamas Shop         3.6       700
US        Ohio      NaN        Pizza Hut          4.5       855
US        Ohio      Pizza      Pizza Hut          4.5       855 

想要的输出。

COUNTRY   STATE     RESTAURANT        STARS    REVIEWS  SPICY   PIZZA 
US        Texas     Texas Chicken     4.1      1,157    1       0 
US        Ohio      Mamas Shop        3.6      700      0       0
US        Ohio      Pizza Hut         4.5      855      0       1 

本质上,我想把很多列 "分组",同时根据Category列的类别创建额外的列。没有任何特定类别的餐厅在所有这些额外列中的值将为0。我也不希望有任何额外的列层,因为我打算把所有的列写成JSON。

将感谢任何帮助,并提前感谢你!

答案

一个组合的 设置指数, 对照表重新索引 可以 "解除 "数据帧,并处理数据帧中的空值。

#set aside required multiindex of country, state, restaurant, stars, and reviews
ind = df.set_index(['COUNTRY','STATE','RESTAURANT','STARS','REVIEWS']).index

#get frequency count for Pizza and Spicy
res = pd.crosstab([df.COUNTRY,df.STATE,df.RESTAURANT,df.STARS,df.REVIEWS],df.CATEGORY)

#reindex frequency dataframe with ind
res = res.reindex(ind,fill_value=0).drop_duplicates()
res


                CATEGORY                    Pizza   Spicy
COUNTRY STATE   RESTAURANT     STARS  REVIEWS       
 US     Texas   Texas Chicken   4.1    1,157    0   1
        Ohio    Mamas Shop      3.6    700      0   0
                Pizza Hut       4.5    855      1   0
另一答案

我想这应该是可行的

pd.crosstab([df.COUNTRY,df.STATE,df.RESTAURANT,df.STARS,df.REVIEWS], df['CATEGORY'].fillna('_')).drop(columns='_')

以上是关于"取消融化 "Dataframe并保留其余列?蟒蛇潘达的主要内容,如果未能解决你的问题,请参考以下文章

将数据框重新排列到表格中,与“融化”相反 [重复]

如何旋转/取消旋转(投射/融化)数据框? [复制]

codesign "操作被用户取消"

取消"成为"

在文本字段中显示 UISearchBar "X" 与相邻的取消按钮

html中取消按钮