假设我有一个看起来像这样的数据框:
order responses
1 [63, 61, 64, 62] [3, 4, 4, 3]
2 [64, 61, 62, 63] [1, 2, 3, 4]
3 [62, 64, 61, 63] [3, 4, 4, 3]
4 [61, 63, 64, 62] [4, 1, 4, 4]
5 [61, 63, 64, 62] [4, 4, 2, 1]
6 [63, 64, 62, 61] [4, 4, 4, 4]
7 [64, 61, 62, 63] [3, 3, 3, 3]
8 [64, 62, 63, 61] [4, 2, 4, 3]
9 [61, 62, 64, 63] [3, 2, 4, 4]
10 [63, 62, 61, 64] [4, 98, 3, 4]
11 [63, 62, 61, 64] [4, 4, 4, 4]
12 [64, 62, 61, 63] [4, 3, 4, 3]
我的目标是创建一个容纳{order: responses}
我尝试通过以下几行做到这一点:
df['combo'] = df[['order', 'responses']].apply(lambda x: zip(x[0], x[1]), axis=1)
哪个返回给我combo
列中的zip对象列表。
现在,当我尝试以下性质的东西时:
df['combo'] = df[['order', 'responses']].apply(lambda x: dict(zip(x[0], x[1])), axis=1)
它会导致以下回溯:
TypeError: ("'dict' object is not callable", 'occurred at index 1')
当我尝试以下操作时:
x = dict(zip(df.order,df.responses))
结果:
TypeError: 'dict' object is not callable
因此,很明显,我没有正确调用字典对象。
我的目标:我需要返回某种数据结构,其中包含所有这些字典。
我通常不会在这里发布信息,如果有什么不符合准则的情况,我们深表歉意。感谢您的帮助!
答案 0 :(得分:0)
dict
将不接受key
作为list
的类型,因此我们将其转换为tuple
d=dict(zip(df.order.apply(tuple),df.responses))
d
Out[155]: {(63, 61, 64, 62): [3, 4, 4, 3], (64, 61, 62, 63): [1, 2, 3, 4]}
作为保鲜盒
[dict(zip(x,y))for x , y in zip (df.order,df.responses)]
Out[158]: [{61: 4, 62: 3, 63: 3, 64: 4}, {61: 2, 62: 3, 63: 4, 64: 1}]
答案 1 :(得分:0)
问题在这里:
.apply(lambda x: dict(zip(x[0], x[1])), axis=1)
apply
是将lambda
的给定功能应用于.apply
之前的序列中每个元素的命令。但是,您将lambda定义为dict而不是函数。