根据另一列创建一个新列

时间:2020-03-18 15:04:36

标签: python pandas

我有一个数据框(称为msg_df),其中有一列称为“消息”。该列的每一行都有一列字典作为值 (示例:

msg_df['messages'][0]
output: 
[{'id': 1, 'date': '2018-12-04T16:26:13Z', 'type': 'b'},
{'id': 2, 'date': '2018-12-11T15:28:49Z', 'type': 'i'},
{'id': 3, 'date': '2018-12-04T16:26:13Z', 'type': 'c'}] )

我需要做的是创建一个新列,我们称之为“ filtered_messages”,其中仅包含具有“ type”:“ b”和“ type”:“ i”的字典。

问题是,当我将list comp应用于单个值时,它可以工作,例如:

test = msg_df['messages'][0]
keys_list = ['b','i']
filtered = [d for d in test if d['type'] in keys_list]
filtered

输出: [{'id':1,'date':'2018-12-04T16:26:13Z','type':'b'}, {'id':2,'date':'2018-12-11T15:28:49Z','type':'i'}]

输出是过滤后的列表,但是,我无法: 1.将相同的概念逐行应用于整个列 2.获取一个新列,其值为过滤列表

Python的新手,在这里确实需要一些帮助。

PS:正在研究Jupyter,拥有大熊猫,麻木等等。

1 个答案:

答案 0 :(得分:0)

一般来说,这看起来像一个奇怪的熊猫结构。 pandas的基础容器是numpy数组,这意味着pandas非常擅长数字处理,并且可以存储其他类型元素。而且存储容器是熊猫细胞不好的...

话虽如此,您可以使用apply将Python函数应用于pandas系列的每个元素,对DataFrame列的表示则不同:

keys_list = ['b','i']
msg_df['filtered_messages'] = msg_df['messages'].apply(lambda x:
                                [d for d in test if d['type'] in keys_list])