“未熔化”数据框并保留其余列?PythonPandas

2024-10-01 01:43:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这种格式的表格,我想用熔化的“反面”进行转换。还有另一个问题可以解决这个问题,但我想保留的其他专栏太多了

原件:

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

如果您有任何帮助,我们将不胜感激,并提前向您表示感谢


Tags: nanshop类别countryrestauranthutusreviews
2条回答

set_indexcrosstabreindex的组合可以“取消”数据帧,并处理数据帧中存在的空值:

#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='_')

相关问题 更多 >