Я работаю над вариантом использования, в котором мне нужно получить минимальную выборку строк из кадра данных, содержащего хотя бы одну строку для каждого уникального значения, найденного во всех столбцах.
Упрощенным примером может быть:
Здесь я хотел бы сохранить строки с идентификаторами 1, 4 и 5, чтобы иметь хотя бы одну строку со значениями D, E и F из A; G, H и I из B и X, Y и Z из C. Мне не нужны все комбинации, только все уникальные значения из каждого столбца:
Каким может быть эффективный способ сделать это?
Спасибо
🤔 А знаете ли вы, что...
Python поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.
вот минимальный пример, который поможет вам начать работу.
USING: # (tab separated !)
ID COLA COLB COLC COLD
1 D G X
2 D G K
3 E G M
4 E H L
5 F I Z L
6 O Z P
#this code
import pandas as pd
df = pd.read_csv('input1.csv', sep='\t')
# get the columns - skipping the first
# remove 'nan', then get unique values using 'set' sorted
for col in list(df)[1:]:
wk=[ member for member in df[col] if not(pd.isnull(member)) == True]
print(f'{col} {sorted(set(wk))}')
#produces
COLA ['D', 'E', 'F', 'O']
COLB ['G', 'H', 'I', 'Z']
COLC ['M', 'X', 'Z']
COLD ['K', 'L', 'P']
надеюсь, это чем-то поможет
Вот что у меня в итоге получилось:
Это далеко не оптимальное решение, поскольку я лишь минимизирую количество строк на каждом шаге, но оно довольно эффективно и выполняет свою работу. Вероятно, можно было бы использовать рекурсивный алгоритм для проверки всех решений, но у меня нет больших требований к окончательному набору строк, за исключением того, что для этого нужны все возможные значения.
Спасибо всем за участие, они помогли мне найти это решение.