如何根据2组列之间的值组合创建列?

如何根据2组列之间的值组合创建列?,第1张

概述我有一个逗号分隔值的数据框,我使用pd.concat拆分出来. 原始df: org country typeOrange USA, GBR, AUS OWF, PMR, KIQRed AUS, RUS, NZL DOG, MOP, LOF 拆分列给了我一个df,我们称之为df_wide, org country_1 country 我有一个逗号分隔值的数据框,我使用pd.concat拆分出来.

原始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组列之间的值组合创建列?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存