gpt4 book ai didi

python - 对于具有一列键和一列值的 Pandas 数据框,制作另一列字典

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:04 25 4
gpt4 key购买 nike

我有以下数据框:

    c1  c2          freq
0 a [u] [4]
1 b [x, z, v] [8, 3, 15]

我想得到另一列“dict”,这样

    c1  c2          freq         dict
0 a [u] [4] {'u':4}
1 b [x, z, v] [8, 3, 15] {'x':8, 'z':3, 'v':15}

我正在尝试这段代码:d["dict"] = d.apply(lambda row: dict(zip(row["c2"], row["freq"]))) 但这给出了错误:KeyError: ('c2', u'occurred at index c1')

不确定我做错了什么。整个练习是我有一个这样定义的全局字典:{"u":4, "v":15, "x":8, "z":3} 和我的初始数据框是:

    c1  c2
0 a u
1 b [x, z, v]

其中 [x, z, v] 是一个 numpy 数组。对于每一行,我想保留全局字典中具有最高值的前 2 个元素(如果它是数组),因此对于第二行,我将保留 xv。为此,我将 c2 列的每个元素转换为一个列表,创建了一个包含它们各自频率的新列,现在我想将其转换为一个字典,以便我可以按值对其进行排序。然后我将保留该行字典的前 2 个键。

d["c2"] = d["c2"].apply(lambda x: list(set(x)))
d["freq"] = d["c2"].apply(lambda x: [c[j] for j in x])
d["dict"] = d.apply(lambda row: dict(zip(row["c2"], row["freq"])))

第三行引起了问题。另外,如果有更有效的程序来完成整个事情,我很乐意提供任何建议。谢谢!

最佳答案

使用列表理解:

df['dict'] = [dict(zip(a,b)) for a, b in zip(df['c2'], df['freq'])]
print (df)
c1 c2 freq dict
0 a [u] [4] {'u': 4}
1 b [x, z, v] [8, 3, 15] {'x': 8, 'z': 3, 'v': 15}

或者在您的解决方案中添加 axis=1 以按行处理:

df["dict"] = df.apply(lambda row: dict(zip(row["c2"], row["freq"])), axis=1)

关于python - 对于具有一列键和一列值的 Pandas 数据框,制作另一列字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58074841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com