Python: почему я не могу сравнить индексы двух фреймов данных, когда один случайный образец - PullRequest
2 голосов
/ 28 января 2020

У меня есть два больших набора данных answer и truth, и я хочу взять случайную выборку из answer, а затем взять выборку из truth, которая имеет те же значения индекса, что и выборочный набор данных answer , но это не работает! Вот что я делаю:

answer = pd.read_csv("answer.csv")
a = answer.sample(700)

truth = pd.read_csv("truth.csv")
truth = truth[truth.index.isin(a.index)]

>>> print(a)
        item    question                   worker answer
9597    20308   clueweb09-enwp01-00-19667   w339    0
7371    20228   clueweb09-en0001-18-32106   w108    1
5527    20180   clueweb09-en0005-86-40955   w127    0
8505    20270   clueweb09-en0010-50-16267   w101    1
18202   20958   clueweb09-en0010-91-30990   w153    0
... ... ... ... ...
18004   20956   clueweb09-en0007-62-27063   w685    1
5532    20180   clueweb09-en0000-46-11807   w108    1
11510   20412   clueweb09-enwp00-91-09937   w353    1
6343    20202   clueweb09-en0003-34-25466   w102    0
16222   20780   clueweb09-en0011-26-41543   w683    0

>>> print(truth)
    item       question             truth
28  20002   clueweb09-en0009-15-02980   1
34  20002   clueweb09-en0010-92-14638   1
59  20002   clueweb09-en0011-89-08538   1
126 20012   clueweb09-en0007-39-22682   1
135 20012   clueweb09-en0007-24-18145   1
... ... ... ...
19610   20996   clueweb09-enwp00-98-10892   0
19626   20996   clueweb09-enwp00-97-10382   0
19663   20996   clueweb09-enwp01-53-09380   1
19676   20996   clueweb09-enwp01-63-12069   1
19688   20996   clueweb09-enwp01-69-11963   1

Кто-нибудь знает, почему truth дает разные значения индекса?

1 Ответ

2 голосов
/ 28 января 2020

Вы должны просто передать значения в .loc, однако вы получите предупреждение о будущем, которое вы можете пока игнорировать. Вот пример:

import pandas as pd
data_1 = {'index':[1,2,3,4,5],'Name':['Sanji','Zoro','Luffy','Nami','Chopper']}
data_2 = {'index':[1,2,5,6,7],'Enemies':['DfDqx','Kuro','BigM','Croco','Exodia']}
df_1 = pd.DataFrame(data_1)
df_2 = pd.DataFrame(data_2)
df_1 = df_1.set_index('index')
df_2 = df_2.set_index('index')

df_new = df_1.loc[df_2.index].dropna(how='any')
print(df_new)

Соответствие должно быть для значений индекса 1, 2 и 5. Вывод:

          Name
index         
1        Sanji
2         Zoro
5      Chopper

Я добавляю dropna(), потому что в противном случае вы будут возвращены все значения df_1 с NaN для значений, в которых значение индекса не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...