原始df:
org country typeOrange USA,GBR,AUS OWF,PMR,KIQRed AUS,RUS,NZL DOG,MOP,LOF
拆分列给了我一个df,我们称之为df_wIDe,
org country_1 country_2 country_3 type_1 type_2 type_3Orange USA GBR AUS OWF PMR KIQWatermelon AUS RUS NZL ODG MOP LOF
从上面的数据框架中,我需要以长格式获得单个国家/地区和单一类型的所有可能组合:
org country typeOrange USA OWFOrange USA PMROrange USA KIQOrange GBR OWFOrange GBR PMROrange GBR KIQ
……等等
这就是我被困住的地方.我错误地认为我可以使用pd.wIDe_to_long转换数据帧,但我认为我的回答是围绕使用itertools.我搜索了与此问题相关的论坛,但我还是没有完全弄明白.寻找任何建议!原始df列中逗号分隔的值也可能是几十个值,因此我不知道我的宽df会有多少列.
解决方法 这是使用itertools.product的一个解决方案.它不需要您创建的中间数据帧.from itertools import chain,productdf = pd.DataFrame({'org': ['Orange','Red'],'country': ['USA,AUS','AUS,NZL'],'type': ['OWF,KIQ','DOG,LOF']})split1 = df['country'].str.split(',')split2 = df['type'].str.split(',')lens = split1.map(len) * split2.map(len)c_List,t_List = zip(*chain.from_iterable(map(product,split1,split2)))res = pd.DataFrame({'org': np.repeat(df['org'],lens),'country': c_List,'type': t_List})
说明
神奇的是这条线:
c_List,split2)))
从内到外工作:
>通过split1 / split2计算每对项目的笛卡尔积.
>将它们链接在一起成为非嵌套的可迭代结果.
>打开包装并压缩成国家和类型.
结果
print(res) org country type0 Orange USA OWF0 Orange USA PMR0 Orange USA KIQ0 Orange GBR OWF0 Orange GBR PMR0 Orange GBR KIQ0 Orange AUS OWF0 Orange AUS PMR0 Orange AUS KIQ1 Red AUS DOG1 Red AUS MOP1 Red AUS LOF1 Red RUS DOG1 Red RUS MOP1 Red RUS LOF1 Red NZL DOG1 Red NZL MOP1 Red NZL LOF总结
以上是内存溢出为你收集整理的如何根据2组列之间的值组合创建列?全部内容,希望文章能够帮你解决如何根据2组列之间的值组合创建列?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)