【问题标题】:Mapping of elements in a list列表中元素的映射
【发布时间】:2019-07-17 02:36:15
【问题描述】:

我正在尝试根据数据框中的映射表映射列表中的元素。我的列表如下所示:

List1 = [('a','b'), ('a','c'), ('a','d'), ('b','c'), ('b','d')]

这样的映射表

mapping = {'name': ['a', 'b', 'c', 'd'],'ID': [1,2,3,2]} 
df = pd.DataFrame(mapping)

我想要达到的目标

Mappedlist = [(1,2), (1,3), (1,2), (2,3), (2,2)]

【问题讨论】:

  • “映射表”是字典吗?还是全局命名空间中的命名变量?
  • 这是一个熊猫数据框@piRSquared
  • @eyllanesc,感谢您的澄清。我应该问的问题都在一个保护伞下。但感谢您编辑了我的完整问题。
  • @Srini 1) 您的版本表明您希望社区对另一个问题做出回应,不幸的是/幸运的是,您应该在每个帖子中只问一个问题,因此按钮显示为“”,不说“s”。 2) 总是展示你尝试过的东西,即使它对社区没有用,也不会重视你的努力,而不仅仅是说“给我代码”。
  • @Srini 3) 始终提供必要的信息,因为您意识到人们对他们的“a”、“b”等做了很多假设。您必须花点时间(恕我直言)一个小时)在压力类似于向老师或老板提供工作的压力下提出最好的问题,因为社区也以同样的方式努力帮助你。

标签: python python-3.x pandas jupyter-notebook


【解决方案1】:

试试这个嵌套列表推导:

print([[df.loc[df['name'] == x, 'ID'].item() for x in i] for i in List1])

输出:

[[1, 2], [1, 3], [1, 2], [2, 3], [2, 2]]

修改:

print([[df.loc[df['ID'] == x, 'name'].item() for x in i] for i in List1])

输出:

[['a','b'], ['a','c'], ['a','d'], ['b','c'], ['b','d']]

【讨论】:

  • 嗨@U10-Forward,我刚刚在问题中添加了另一部分。如果你也能帮忙?
  • @Srini 现在检查我的答案
  • @Srini 尝试用locals替换globals
  • 刚试了,可惜不行。我的映射表基本上在数据框中 Column1 有 a, b, c, d Column2 有 1,2,3,2
  • @Srini 我编辑了它现在请检查它,如果它有效,请接受并投票
【解决方案2】:

Mappedlist 中迭代一次而不是嵌套循环可能是一个更好的主意:

[(df['ID'].loc[df.name == x].item(), df['ID'].loc[df.name == y].item()) for (x, y) in List1]
# Result: [(1, 2), (1, 3), (1, 2), (2, 3), (2, 2)]

【讨论】:

    【解决方案3】:

    您可以在列表中调用变量而不是字符串,但请确保变量应位于 List1 之前

    a = 1
    b = 2
    c = 3
    d = 2
    
    List1 = [(a,b), (a,c), (a,d), (b,c), (b,d)]
    
    print(List1)
    

    输出

    [(1, 2), (1, 3), (1, 2), (2, 3), (2, 2)]
    

    【讨论】:

    • List1 不是[(a,b), (a,c), (a,d), (b,c), (b,d)],它是[('a','b'), ('a','c'), ('a','d'), ('b','c'), ('b','d')] - 非常不同的东西。因此不幸的是,您的解决方案无法解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多