"取消融化 "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并保留其余列?蟒蛇潘达的主要内容,如果未能解决你的问题,请参考以下文章