python – Pandas – 创建类似于pd.get_dummies的多个列
发布时间:2020-12-20 13:13:56 所属栏目:Python 来源:网络整理
导读:假设我的数据如下所示: df = pd.DataFrame({'color': ['red','blue','green','red','blue'],'line': ['sunday','sunday','monday','tuesday'],'group': ['1','1','2','1'],'value': ['a','b','a','c','b']}) color group line value0 red 1 sunday a1 blue
假设我的数据如下所示:
df = pd.DataFrame({'color': ['red','blue','green','red','blue'],'line': ['sunday','sunday','monday','tuesday'],'group': ['1','1','2','1'],'value': ['a','b','a','c','b']}) color group line value 0 red 1 sunday a 1 blue 1 sunday b 2 green 2 monday a 3 red 1 monday c 4 blue 1 monday a 5 blue 1 tuesday b 基本上,我想要的是获得每种颜色的行列表.例如,我希望颜色为红色,以在其自己的列中显示与其关联的每一行和值.诀窍是我还想显示与同一组颜色相关的其他线条.这些的相应值将是“不符合条件”.因此我希望我的输出看起来像这样: color line_1 line_1_value line_2 line_2_value line_3 line_3_value 0 red sunday a monday c tuesday not eligible 1 blue sunday b monday a tuesday b 2 green monday c 我需要做大约50,000种独特的“颜色”.我确信这是相对简单的事情,但我还没有掌握所需的知识或技能.任何帮助,将不胜感激! 解决方法
删除不需要的列并添加一列以获得每种颜色的唯一子索引:
df = df.drop('group',axis=1) df['index_by_color'] = df.groupby('color').cumcount() color line value index_by_color 0 red sunday a 0 1 blue sunday b 0 2 green monday a 0 3 red monday c 1 4 blue monday a 1 5 blue tuesday b 2 使用 df.pivot_table(index='color',columns=['index_by_color'],aggfunc=lambda x:x.iloc[0]) line value index_by_color 0 1 2 0 1 2 color blue sunday monday tuesday b a b green monday None None a None None red sunday monday None a c None 关于aggfunc = lambda x:x.iloc [0]的事情是将非数字轮转数据减少为特定值,并且子帧的第一个元素足够根据数据结构的单一性. 对列分层索引重新排序: res = res.sort_index(axis=1,level=1) line value line value line value index_by_color 0 0 1 1 2 2 color blue sunday b monday a tuesday b green monday a None None None None red sunday a monday c None None 其余的部分是微不足道的清理,具体取决于你需要的确切的表示,如cumcount()1,如果你需要开始编号为1而不是0,写入/展平列名称,你想要res.columns = [‘_’.join ([l0,str(l1)])对于l0,在res.columns中为l1]或等价物等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |