我有一個看起來像這樣的資料框:
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)
uj5u.com熱心網友回復:
用:
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 [] [] {}
uj5u.com熱心網友回復:
你可以試試df.apply:
>>> df['c'] = df.apply(lambda row: dict(zip(*row)), axis=1)
>>> 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 [] [] {}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/347780.html
上一篇:根據另一個字典值對字典進行排序
下一篇:Python:從csv構建字典
