Это расширение моего предыдущего вопроса по адресу: Сравнение столбцов данных и возвращение разницы .
После сравнения столбцов всех фреймов данных в моей коллекции из 37 фреймов данных я обнаружил, что некоторые из фреймов данных имеют одинаковые столбцы, а некоторые - разные. Таким образом, теперь необходимо сравнить эти разные кадры данных и вернуть разницу. Этот шаг должен продолжаться до тех пор, пока все кадры данных не будут отсортированы по двум группам, то есть кадры данных с одинаковыми столбцами в одной группе и разные кадры данных столбцов во второй группе.
например:
df = [None] * 6
df[0] = pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'c':[7,8,3], 'd':[1,5,3]})
df[1] = pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'c':[7,8,3], 'd':[1,5,3]})
df[2] = pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'x':[7,8,3], 'y':[1,5,3]})
df[3] = pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'c':[7,8,3], 'd':[1,5,3]})
df[4] = pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'x':[7,8,3], 'z':[1,5,3]})
df[5] = pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'x':[7,8,3], 'y':[1,5,3]})
# code to group the dataframes into similar and different cols groups
nsame = []
same = []
for i in range(0, len(df)):
for j in range(i+1, len(df)):
if not (df[i].columns.equals(df[j].columns)):
nsame.append(j)
else:
same.append(i)
Когда я печатаю вышеуказанный код для той же группы (такой же), вывод будет таким:
print(same)
[0, 0, 1, 2]
Желаемый вывод:
print(same)
[0, 1, 3]
Возможно, мне нужна рекурсивная функция, чтобы сгруппировать все похожие столбцы в одну группу и все разные кадры данных столбцов в другую группу. Однако сложная часть заключается в том, что может существовать более двух групп. Например, в приведенном выше коде есть 3 группы:
Group1: df[0], df[1], df[3]
Group2: df[2], df[5]
Group3: df[4]
Может кто-нибудь помочь здесь?