Сравнение значений по строкам панд, чтобы найти скорость совпадения между двумя строками, у которых высокий уровень сходства строк - PullRequest
0 голосов
/ 23 сентября 2019

Я изо всех сил пытаюсь вычислить частоту совпадения атрибутов для элемента с высоким сходством двух строк, с которым я совпал.

Я пытался использовать 2 переменных цикла, но была ошибка, подобная этой 'IndexError: одиночный позиционный индексаторвне границы '

Код, который я пробовал:

nuomlist = pd.DataFrame(dfn.columns, columns=['Col'])
nuomN = nuomlist[nuomlist['Col'].str.contains('-')].index.tolist()

 for i in range(int(nuomN[-1]+1),int(dfn.columns.get_loc("sim_1"))) :
 for j in dfn.index:

  sum(dfn.iloc[j,i]==dfn.iloc[j+dfn.iloc[j,dfn.columns.get_loc('Max_row')],i])/ 
  int(dfn.columns.get_loc("sim_1") - (nuomN[-1] + 1))

Это пример набора данных

data = {'S_ITEMCODE':['', '81527800', '', '81527900'],
        'N':['N', '','N', ''],
        'ITEMCODE':['81527800', '81320323', '81527900', '81267337'],
        'DESC':['Store Brand (Woongjin) SB Fresh Orange Drink Orange NO P.BTL 1.5lit', 'Store Brand (Woongjin) SB Fresh Orange Drink Orange NO P.BTL 1lit', 'Store Brand (Woongjin) SB Fresh Jeju Tang. Drink Tang. NO P.B 1.5lit', 'Store Brand (Woongjin) SB Fresh Jeju Tang. Drink Tang. NO P.B 1lit'],
        'ATTR1':['1A', '1A', '1B', '1B'],
        'ATTR2':['1A', '1C', '1B', '1B'],
        'ATTR3':['1A', '1A', '1B', '1B'],
        'ROW_INDEX_SIMILAR_ITEM':[1, -1, 1, 1]}

df = pd.DataFrame(data)

Столбец N обозначает новыйпредмет.

Я хотел бы рассчитать частоту совпадения атрибутов для строк, где 'N' == 'N' между новым элементом и высокоуровневым элементом сходства строк Jaccard (S_itemcode)

(ig 81527800 (Newэлемент) -81320323, 81527900 (новый элемент) -81267337)

Это мои желаемые результаты.

data1 = {'S_ITEMCODE':['', '81527800', '', '81527900'],
        'N':['N', '','N', ''],
        'ITEMCODE':['81527800', '81320323', '81527900', '81267337'],
        'DESC':['Store Brand (Woongjin) SB Fresh Orange Drink Orange NO P.BTL 1.5lit', 'Store Brand (Woongjin) SB Fresh Orange Drink Orange NO P.BTL 1lit', 'Store Brand (Woongjin) SB Fresh Jeju Tang. Drink Tang. NO P.B 1.5lit', 'Store Brand (Woongjin) SB Fresh Jeju Tang. Drink Tang. NO P.B 1lit'],
        'ATTR1':['1A', '1A', '1B', '1B'],
        'ATTR2':['1A', '1C', '1B', '1B'],
        'ATTR3':['1A', '1A', '1B', '1B'],
        'ROW_INDEX_SIMILAR_ITEM':[1, -1, 1, 1]}
        'ATTR_MATCHING_RATE':[2/3, '', 1, '']}

df = pd.DataFrame(data1)

Пожалуйста, помогите мне ... Я застрял ...

1 Ответ

0 голосов
/ 23 сентября 2019

Это даст вам желаемый результат:

tested_cols = ['ATTR1', 'ATTR2', 'ATTR3']
df['matches'] = 0
for col in tested_cols:
    df.loc[(df['N'] == 'N') & (df[col] == df[col].shift(-1)), 'matches'] += 1
df['ATTR_MATCHING_RATE'] = df['matches'] / len(tested_cols)
df.drop('matches', axis=1, inplace=True)
...