【发布时间】:2021-12-17 04:29:45
【问题描述】:
我有一个如下所示的数据框:
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)
【问题讨论】:
标签: python pandas dataframe dictionary series