Скажем, например, что у меня есть два набора данных, которые хранятся в виде фреймов данных Pandas, например:
Data1:
C1 C2
"Peter" "kiwi"
"John" "banana"
"Susan" "peach"
"Joe" "apple"
Data2:
C3 C4
"apple" 4
"banana" 7
"apple" 4
Я хотел бы сначала кэшировать индексы совпадающих записей данных между двумя фреймами данных Pandas.Эта часть не учитывается в моем анализе времени выполнения, и было бы неплохо вычислить заранее для более эффективных поисков хешей позже.
например, желаемый вывод
{banana: [1] (banana from Data1 matches with row 1 in Data2)
apple: [0,2]} (apple from Data1 matches with row 0 & 2 in Data2)
Затем для каждой строки в данных1Я хотел бы суммировать значения Data2 [C4] для всех найденных совпадений.Более конкретно к примеру, я хочу, чтобы результирующее вычисление было таким:
"Peter": 0 (no match for "kiwi")
"John": 7 (one match for "banana", it's just 7)
"Susan": 0 (no match for "peach")
"Joe": 8 (two matches for "apple", they're 4+4)
Есть ли хороший способ сделать это, используя кадр данных pandas, или numpy, эффективно?Ака использует промежуточные шаги от вычисления словаря, чтобы помочь увеличить скорость суммирования позже.
Примечание:
Первая задача может быть сделана чем-то вроде
Data1.reset_index().groupby('C3')['index'].apply(list).loc[Data0.C2.unique()]
Второе задание может быть выполнено чем-то вроде
Data0['W'] = Data0['C2'].map(Data1.set_index('C3', append=True)) \
.sum(level=1)['C4']).fillna(0)
Но не уверен, как воспользоваться преимуществами работы, использованной в первой части, чтобы помочь в вычислениях со второй частью.