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

问题描述 投票:0回答:1

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

原文是这样的。

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。

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

python pandas reshape melt
1个回答
0
投票

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

#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

0
投票

我想这应该是可行的

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

© www.soinside.com 2019 - 2024. All rights reserved.