首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中添加带有字典值的列

如何在Python中添加带有字典值的列
EN

Stack Overflow用户
提问于 2020-08-14 21:50:45
回答 3查看 1.6K关注 0票数 2

我正在尝试添加一个列,其中包含字典中的值。这将是很容易向您展示虚拟数据。

代码语言:javascript
复制
df = pd.DataFrame({'id':[1,2,3,2,5], 'grade':[5,2,2,1,3]})

dictionary = {'1':[5,8,6,3], '2':[1,2], '5':[8,6,2]}

注意,并非每个id都在字典和作为列表的值中。我希望在df中找到与字典中的键匹配的行,并在一列中添加列表。因此,所需的输出如下所示:

代码语言:javascript
复制
output = pd.DataFrame({'id':[1,2,3,2,5], 'grade':[5,2,2,1,3], 'new_column':[[5,8,6,3],[1,2],[],[1,2],[8,6,2]]})
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-14 21:57:18

这是你想要的吗?

代码语言:javascript
复制
df = df.set_index('id')
dictionary = {1:[5,8,6,3], 2:[1,2], 5:[8,6,2]}    
df['new_column'] = pd.Series(dictionary)

注意:字典的键必须与数据帧的索引相同类型(int)。

代码语言:javascript
复制
>>> print(df)
    gender    new_column
id                      
1        0  [5, 8, 6, 3]
2        0        [1, 2]
3        1           NaN
4        1           NaN
5        1     [8, 6, 2]

更新:

如果'id'列包含重复项(请参见下面的注释),则提供更好的解决方案:

代码语言:javascript
复制
df['new_column'] = df['id'].map(dictionary)
票数 2
EN

Stack Overflow用户

发布于 2020-08-14 22:01:55

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({'id':[1,2,3,4,5], 'gender':[0,0,1,1,1]})

dictionary = {'1':[5,8,6,3], '2':[1,2], '5':[8,6,2]}

然后创建一个包含您想要的值的列表,并将它们添加到您的dataframe中。

代码语言:javascript
复制
newValues = [ dictionary.get(str(val),[]) for val in df['id'].values]

df['new_column'] = newValues


>>> print(df)
    gender    new_column
id                      
1        0  [5, 8, 6, 3]
2        0        [1, 2]
3        1            []
4        1            []
5        1     [8, 6, 2]
票数 0
EN

Stack Overflow用户

发布于 2020-08-14 22:06:42

您可以使用默认值为[]的特殊字典来构造列。

代码语言:javascript
复制
from collections import defaultdict
default_dictionary = defaultdict(list)
id = [1,2,3,4,5]
dictionary = {'1':[5,8,6,3], '2':[1,2], '5':[8,6,2]}
for n in dictionary:
    default_dictionary[n] = dictionary[n]
new_column = [default_dictionary[str(n)] for n in id]

new_column现在是[[5, 8, 6, 3], [1, 2], [], [], [8, 6, 2]],您可以将它传递到pd.DataFrame(...)的最后一个参数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63420426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档