如何将Pandas中包含多条信息的单列拆分为多个独立列?
解决方案
你当前遇到的单列问题是因为groupby()搭配value_counts()返回的是带MultiIndex的Series,索引层级默认不会转为普通列,只需要用reset_index()即可完成拆分,之后用布尔索引过滤即可。
完整可运行代码
import pandas as pd members = pd.read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-09-22/members.csv") expeditions = pd.read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-09-22/expeditions.csv") success_members_exp = pd.merge(members, expeditions[['expedition_id','termination_reason']], on='expedition_id', how='inner') # 1. 计算百分比同时把MultiIndex转为普通列 success_members_exp_pourcent = success_members_exp.groupby('expedition_id')['success'].value_counts(normalize=True).reset_index(name='pourcent') success_members_exp_pourcent['pourcent'] = success_members_exp_pourcent['pourcent'] * 100 # 2. 过滤掉success为False的记录,只保留成功相关的占比数据 filtered_df = success_members_exp_pourcent[success_members_exp_pourcent['success'] == True]
代码说明
reset_index(name='pourcent'):把原来的两层索引expedition_id、success全部转为普通列,同时把统计的占比值命名为pourcent,执行后你会得到3个独立列:expedition_id、success、pourcent- 布尔索引
success_members_exp_pourcent['success'] == True:直接筛选出所有成功相关的行,自动剔除success为False的记录
内容的提问来源于stack exchange,提问作者user17501078
相关产品推荐
相关产品推荐

