覚え書き/想起ゲームを想像してみましょう。チョコレートと他のものでいっぱいのテーブルがある部屋があります。あなたは各テーブルを見るのに20秒ある。後で、あなたが見たことが尋ねられます。これにより、2つのデータセットが得られます。 1つはテーブルの構成で、もう1つは覚えておくことができます。タスクは、あなたが正しく想起したアイテムと覚えていないアイテムを評価することです。この作業では、製品のブランドについては気にしません。ちょうどタイプ。パンダ:互いに2つのデータフレームを評価する
ここでは、2つの部屋の設定例です。
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つのチョコレートバーがあるので、3つ目を逃しました。部屋2のために、ナッツの第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'))
私はあなたがcumcount
によってrooms
とkind
ごとに一意の値のためのヘルパーの列が必要だと思う
おかげ
最後にkind対kind_recallを評価しますか?あなたの解決策の問題は、room1の場合、人が正しく覚えているにもかかわらず、Bah_ssナットがkind_recall列のNaNであるということです。 – Matthias
'df_config.groupby(['room'、 'type'])。cumcount()'はどうですか? – jezrael
うん、それはうまくいった。非常にエレガントなソリューション。ありがとう。 – Matthias