我有这本字典:
j = {1: {'help': 2},
2: {'chocolate': 1, 'help': 1},
3: {'chocolate': 1, 'help': 1}}
和这个数据帧:
df = pd.DataFrame({'docId': [1, 2, 3, 1, 2, 3, ],
'sent': ['help', 'chocolate', 'chocolate', 'help', 'help', 'help']})
我想根据docId和term匹配值,所以它应该如下所示:
docId sent freq
1 help 2
2 chocolate 1
3 chocolate 1
1 help 2
2 help 1
3 help 1
我不知道如何实现这一点,我正在努力使用地图并申请,但我没有得到任何结果.
解决方法:
重新制作你的字典
J = {(x, y): v for x, V in j.items() for y, v in V.items()}
df.assign(freq=[*map(J.get, zip(df.docId, df.sent))])
docId sent freq
0 1 help 2
1 2 chocolate 1
2 3 chocolate 1
3 1 help 2
4 2 help 1
5 3 help 1
或者不
您可以在map中使用带有两个参数的lambda并传递提供参数的iterables.
df.assign(freq=[*map(lambda x, y: j[x][y], df.docId, df.sent)])
docId sent freq
0 1 help 2
1 2 chocolate 1
2 3 chocolate 1
3 1 help 2
4 2 help 1
5 3 help 1