Справочная информация: у меня есть 2 файла с несколькими совпадающими столбцами, и между ними есть общий столбец для сравнения.
Пример:
Table 1 , about 10K rows
| col1 | col2 | col3 |
|------|------|------|
| adam | key1 | def |
| mike | key2 | efg |
Table 2 , about 5k rows
| col1 | col2 | col3 | col4 |
|------|------|------|------|
| adam | key1 | def | abc |
| mike | key2 | | cdf |
Теперь я пытаюсьполучить данные из первого файла, сравнить их со вторым и, если они отличаются, создать новый файл, чтобы получить полную строку из первого файла.Таким образом, в приведенном выше примере, принимая первый столбец в качестве столбца сравнения, для adam col1, 2, 3 одинаковы, поэтому запись обновления не требуется.для mike значение col2 будет таким же, но значение col3 будет другим, поэтому оно будет частью файла обновления.
Я использую python, и в настоящее время он слишком прост, и я не могу найти более эффективныйспособ для этого
df_1 = pd.read_excel("file1.xlsx")
df_2 = pd.read_excel("file2.xlsx")
df_1 = df_1.fillna('')
df_2 = df_2.fillna('')
df_3 = pd.DataFrame()
for i in range(0, len(df_1.index)):
for j in range(0,len(df_2.index)):
if(df_1[col1].iloc[i] == df_2[col1].iloc[j]):
flag = 0
if(df_1[col2].iloc[i] != df_2[col2].iloc[j]): flag = 1
if(df_1[col3].iloc[i] != df_2[col3].iloc[j]): flag = 1
if(flag): df_3 = df_3.append(df_1.iloc[[i]])
break;
writer = ExcelWriter("update.xlsx")
df_3.to_excel(writer,index=False,header=True)
Я пробовал несколько вариантов, как показано ниже, пытался использовать что-то вдоль строк совпадения в общей строке, используя значение col1, а затем проверял, являются ли другие два значения столбца одинаковыми, и возвращал это, но не возвращает все необходимые данные
df_3 = df_1[(
df_1['col1'].isin(df_2['col1']) &
(~df_1['col2'].isin(df_2['col2'])
| ~df_1['col3'].isin(df_2['col3'])
)
)]
Вывод:
col1 col2 col3
0 mike key2 efg