【发布时间】:2018-05-11 17:33:58
【问题描述】:
让我们想象一个记忆/回忆游戏。有些房间的桌子上摆满了巧克力和其他东西。您有 20 秒的时间查看每张桌子。稍后你会被问到你看到了什么。这给出了两个数据集。一个是表格的配置,另一个是你能记住的。任务是评估您正确回忆了哪些项目以及您不记得哪些项目。在这个任务中,我们不关心产品的品牌。只是类型。
这是两个房间的示例配置。
config = [
{'room': 'room1', 'kind': 'chocolate', 'brand': 'Mars'},
{'room': 'room1', 'kind': 'chocolate', 'brand': 'Mars'},
{'room': 'room1', 'kind': 'chocolate', 'brand': 'Milka'},
{'room': 'room1', 'kind': 'nuts', 'brand': 'Bahlsen'},
{'room': 'room2', 'kind': 'chocolate', 'brand': 'Mars'},
{'room': 'room2', 'kind': 'nuts', 'brand': 'Ültje'},
{'room': 'room2', 'kind': 'nuts', 'brand': 'Bahlsen'}
]
import pandas as pd
df_config = pd.DataFrame(config).sort_values(['room'])
df_config
现在你有 20 秒的时间来记住时间。之后你会被问到你看到了什么。以下是你记得的:
recall = [
{'room': 'room1', 'kind': 'chocolate'},
{'room': 'room1', 'kind': 'chocolate'},
{'room': 'room1', 'kind': 'nuts'},
{'room': 'room2', 'kind': 'nuts'}
]
import pandas as pd
df_recall = pd.DataFrame(recall).sort_values(['room'])
df_recall
显然,您在 1 号房间看到了两根巧克力棒,因此您错过了第三根。对于房间 2,您错过了第二袋坚果。所以,评估结果会是这样的:
correct = [
{'room': 'room1', 'kind': 'chocolate', 'brand': 'Mars', 'eval': 'correct'}, # first chocolate room1
{'room': 'room1', 'kind': 'chocolate', 'brand': 'Mars', 'eval': 'correct'}, # second chocolate room1
{'room': 'room1', 'kind': 'nuts', 'brand': 'Bahlsen', 'eval': 'correct'}, # first nuts room1
{'room': 'room2', 'kind': 'nuts', 'brand': 'Ültje', 'eval': 'correct'}, # first nuts room2
]
incorrect = [
{'room': 'room1', 'kind': 'chocolate', 'brand': 'Milka', 'eval': 'incorrect'}, # third chocolate room1 not recalled
{'room': 'room2', 'kind': 'chocolate', 'brand': 'Mars', 'eval': 'incorrect'}, # first chocolate room2 not recalled
{'room': 'room2', 'kind': 'nuts', 'brand': 'Bahlsen', 'eval': 'incorrect'} # second nuts room2 not recalled
]
我正在考虑根据房间合并两个数据集,然后按房间分组并评估每个组。通过迭代组或使用df.groupy(['room']).apply(my_function)。问题是,合并为每个房间创建了一个相当大的组,我不确定如何评估它。
df = pd.merge(df_config, df_recall, on='room', suffixes=('', '_recall'))
欢迎提出任何想法!
谢谢
【问题讨论】:
标签: python pandas join dataframe merge