Как мне попытаться сравнить два столбца в разных фреймах одновременно? - PullRequest
1 голос
/ 11 октября 2019

У меня есть два кадра данных, где я пытаюсь сравнить два столбца (Cat1 и Cat2) и где Cat1 и Cat2 одинаковы. Я хочу суммировать значения в столбце Prc

Итак, в приведенном ниже примереединственными двумя строками, которые соответствуют критериям, являются строка 0 и строка 4 в df [0], которая соответствует строке 1 и строке 4 в df [1], и поэтому в этом случае сумма будет равна 200 для df [0] и 185 дляdf [1]

df[0]
  Cat1 Cat2 Cat3 Prc
0  11   0    5   100
1  22   2    9   150
2  33   1    8    50
3  44   2    6   200
4  55   1    8   100

df[1]
  Cat1 Cat2 Cat3 Prc
0  66   1    6   120
1  11   0    5    90
2  44   1    6   185
3  77   2    7   145
4  55   1    5    95   

Я могу сравнить Cat1 в df [0] [vs df [1], используя .isin, но если это все, что я сделал, я бы выбрал строку 3 в df [0], хотя Cat2 отличается в df [0] и d [1]

. Как мне попытаться сравнить два столбца в разных фреймах одновременно?

это большие фреймы данных500 000 строк по 32 столбца в каждой, поэтому я хочу избегать создания новых фреймов данных или новых столбцов.

1 Ответ

2 голосов
/ 11 октября 2019

Одна идея - использовать DataFrame.merge для пересечения нескольких столбцов, фильтровать столбцы с Prc и sum:

df1 = df[0].merge(df[1], on=['Cat1','Cat2'], suffixes=('_0','_1'))
print (df1)
   Cat1  Cat2  Cat3_0  Prc_0  Cat3_1  Prc_1
0    11     0       5    100       5     90
1    55     1       8    100       5     95

print (df1.filter(like='Prc').sum())
Prc_0    200
Prc_1    185
dtype: int64

Другая идея с MultiIndex по столбцамдля пересечения с DataFrame.set_index и Index.isin и фильтрации по boolean indexing:

s1 = df[0].set_index(['Cat1','Cat2'])['Prc']
s2 = df[1].set_index(['Cat1','Cat2'])['Prc']

print (s1[s1.index.isin(s2.index)].sum())
200
print (s2[s2.index.isin(s1.index)].sum())
185
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...