我有一个这样格式的表,我想用融化的 "反面 "来转换。还有一个问题是解决这个问题的,但是我想保留这么多其他的列就不行了。
原文是这样的。
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='_')