为了账号安全,请及时绑定邮箱和手机立即绑定

从 pandas 列表系列中提取元素并存储为单独的系列

从 pandas 列表系列中提取元素并存储为单独的系列

胡子哥哥 2023-09-12 17:25:19
我有这个 df (带有示例所需的结果)dfn = pd.DataFrame({"country_code": ["USA, UK, FRA", "RUS, ZHC, JAP", "IN, BRA, ES"],                     "all_but_american_desired": [["United Kingdom", "France"], ["Russia", "China", "Japan"], ["India", "Spain"]]})我将(到目前为止)字符串“翻译”为新含义并存储为元素列表masked = {"USA":"United States", "UK":"United Kingdom", "FRA":"France",           "RUS":"Russia", "ZHC":"China", "JAP":"Japan",           "IN":"India", "BRA":"Brazil", "ES":"Spain"}dfn["country_name"] = dfn["country_code"].apply(lambda x: [", ".join({masked[i] for i in x.split(", ")})])然后,我想通过外部列表提取一些翻译后的country_name系列,american并将它们放在一个单独的系列中(all_but_american)american = ["United States", "Brazil"]结果应该与all_but_american_desired系列相同。到目前为止我尝试过的:dfn["all_but_american1"] = dfn["country_name"].apply(lambda x: [i for i in x if i not in american])我之前使用过尝试1非常相同的方法并且它有效,但是这次没有任何效果,我找不到原因(这次我也尝试过其他方法,但由于我对它们不熟悉)不会发帖)...有人可以检查一下吗?如果可能的话,也解释一下我做错了什么。
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

要country_name创建列表,而不是使用连接值的元素列表:


dfn["country_name"] = dfn["country_code"].apply(lambda x: [masked[i] for i in x.split(", ")])

然后你的第二个解决方案运行良好:


american = ["United States", "Brazil"]


dfn["all_but_american1"] = dfn["country_name"].apply(lambda x: [i for i in x if i not in american])

print (dfn)

    country_code  all_but_american_desired  \

0   USA, UK, FRA  [United Kingdom, France]   

1  RUS, ZHC, JAP    [Russia, China, Japan]   

2    IN, BRA, ES            [India, Spain]   


                              country_name         all_but_american1  

0  [United States, United Kingdom, France]  [United Kingdom, France]  

1                   [Russia, China, Japan]    [Russia, China, Japan]  

2                   [India, Brazil, Spain]            [India, Spain]  


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信