python - 创建包含两个包含列表的 pandas df 列的字典的列
问题描述
我有一个如下所示的数据框:
df
a b
0 [1, 2] ['first', 'second']
1 [] []
2 [5] [1]
3 [] []
4 ['a'] ['b']
5 [] []
我想创建一个列 (c),它应该有一个字典,其中包含列 (a) 和 (b) 上的值的 zip。
如果 (a) 和 (b) 列的值不是列表,我可以使用df.c = dict(zip(df.a, df.b))
. 但是,因为它们是列表,所以它给了我一个错误。我可以通过 将它们转换为元组list(zip(df.a, df.b))
,但遗憾的是需要字典。
最终,我正在寻找的输出如下:
df
a b c
0 [1, 2] ['first', 'second'] {1: 'first', 2:'second'}
1 [] [] {}
2 [5] [1] {5:1}
3 [] [] {}
4 ['a'] ['b'] {'a':'b'}
5 [] [] {}
有没有循环遍历数据框 1by1 行的任何想法?
好吧,两个答案都给出了相同的输出。谢谢你的回答。然而,在基准测试之后,我接受了最快的一个。
%timeit [dict(zip(ai, bi)) for ai, bi in zip(df['parameter_ids'], df['parameter_values'])]
7.76 ms ± 77 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df[['parameter_ids', 'parameter_values']].apply(lambda row: dict(zip(*row)), axis=1)
140 ms ± 2.81 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
解决方案
采用:
import pandas as pd
# setup
data = [[[1, 2], ['first', 'second']],
[[], []],
[[5], [1]],
[[], []],
[['a'], ['b']],
[[], []]]
df = pd.DataFrame(data=data, columns=["a", "b"])
df["c"] = [dict(zip(ai, bi)) for ai, bi in zip(df.a, df.b)]
print(df)
输出
a b c
0 [1, 2] [first, second] {1: 'first', 2: 'second'}
1 [] [] {}
2 [5] [1] {5: 1}
3 [] [] {}
4 [a] [b] {'a': 'b'}
5 [] [] {}
推荐阅读
- python-3.x - 如何解决 IDLE 中的 ModuleNotFound 错误?
- javascript - 输入焦点时禁用 Javascript 函数
- java - 当列数据类型为字符串时,如何在结果集中的输出值中添加双引号?
- java - 尽管我生成的查询工作正常,为什么 JDBC-MySQL 会在您的 SQL 语法中引发错误?
- python - 熊猫数据框中重复位置的频率
- android - GCM 弃用:旧客户端 SDK
- javascript - jQuery使用select for ajax请求查找所有输入类型
- arrays - 过滤数组,以便删除所有未定义的对象
- contact-form-7 - 如何在默认情况下在 WordPress 中的联系表单 7 上显示当前日期和时间,而无需在 datetimepicker 中获取用户的输入
- android - 如果我在菜单/按钮上单击两次,ProgressDialog 不会停止