【问题标题】:Creating a new column in a data frame by mapping the values from a dictionary to an existing column通过将字典中的值映射到现有列来在数据框中创建新列
【发布时间】:2018-06-13 16:58:38
【问题描述】:

我有一本这样的字典:

dictionary = {100:[1, 2], 110:[3, 4], 
               120:[5, 6, 7], 130:[8, 9], 
               140:[10, 11, 12, 13], 
               150:[14, 15]}

我已经有一个现有的列“A”,并想创建一个新列“B”并将值映射回每个键,但以数据框格式显示。这是我希望收到的输出:

 #Column A is the existing column. Column B is the new one to be created
    A     B 
    4     110
    8     130
    15    150
    7     120
    7     120
    4     110
    9     130
    1     100
    2     100

如何做到这一点?帮助将不胜感激。提前致谢!

【问题讨论】:

  • 你有没有尝试过任何方法?
  • 期望的输出真的正确吗?缺少1501403, 110 等。
  • 数据规模更大,但这只是我希望它如何输出的一个例子。我的解决方案应该包括所有分组的值和键,但是示例太长了因此做了一个小样本。@Ajax1234

标签: python pandas dictionary data-structures


【解决方案1】:

通过理解来反转你的字典。然后在你的新字典中使用pd.Series.map

d = {100:[1, 2], 110:[3, 4], 120:[5, 6, 7], 130:[8, 9], 
     140:[10, 11, 12, 13], 150:[14, 15]}

d_rev = {w: k for k, v in d.items() for w in v}

df['B'] = df['A'].map(d_rev)

print(df)

    A    B
0   4  110
1   8  130
2  15  150
3   7  120
4   7  120
5   4  110
6   9  130
7   1  100
8   2  100

【讨论】:

  • 谢谢,@jpp 就像一个魅力。只是一个查询。如果键是字符串值,语法概念是否相同?只是想知道未来!
  • 是的,同样的过程也可以。唯一的要求是您的系列的类型与您的字典键类型相同。所以字符串 + 字符串,或数字 + 数字都可以。
猜你喜欢
  • 2018-03-15
  • 2021-05-26
  • 2021-07-14
  • 1970-01-01
  • 2020-03-01
  • 2018-05-03
  • 2020-08-25
  • 2018-08-23
  • 2018-01-22
相关资源
最近更新 更多