Как получить набор данных с помощью python или C ++ - PullRequest
0 голосов
/ 13 июля 2020

У меня данные выглядят так:

введите описание изображения здесь

Итак, если я дам имя для каждой строки: a1 a2 b1 b2 c1 c2 d1 d2. Правило: AB C D, вы можете поменять местами позиции в каждой большой строке. Мне нужно взять набор из 4 чисел, поэтому у меня будет:

  • a1 b1 c1 d1
  • a2 b1 c1 d1
  • a1 b2 c2 d2
  • a2 b2 c2 d2
  • a1 b1 c2 d2
  • a2 b1 c2 d2
  • a1 b1 c1 d2
  • a2 b1 c1 d2
  • a1 b2 c1 d2
  • a2 b2 c1 d2
  • a1 b1 c1 d2
  • a2 b1 c1 d2
  • a1 b1 c2 d1
  • a2 b1 c2 d1
  • a1 b2 c2 d1
  • a2 b2 c2 d1

Итак, когда я изменил номер, у меня будет много наборов данных. Как я могу фильтровать, чтобы получить уникальный набор данных. И посчитайте, сколько раз он появляется для каждого уникального набора.

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Спасибо Roman_N, вот мой код:

import pandas as pd
import xlrd
import functools, operator
import itertools
from collections import Counter

df = pd.read_csv("BN.csv")

result = []
for index,row in df.iterrows():
    s = [[row['a1'],row['a2']], [row['b1'],row['b2']], [row['c1'],row['c2']], [row['d1'],row['d2']]]
    for item in list(itertools.product(*s)):
        result.append(item)

# print(result)

counts = Counter(item for item in result)

for element in counts:
    print(element, counts[element])

print(list, 'length is', len(counts))
0 голосов
/ 13 июля 2020

Мм, генетика, вкусно ...

Итак, для решения этой задачи в Python нужно сделать:

  1. Захватить данные из xmls (Вроде как xmls). Просто используйте pandas: pd.read_excel()
  2. (ДОПОЛНИТЕЛЬНЫЙ ШАГ) Подготовьте свои данные. Я вижу одну ячейку без значения, это может вызвать проблемы.
  3. Создайте индексы в соответствии с вашими желаниями (a1, a2 et c.). Вы можете сгенерировать его с помощью for-loor со списком в качестве возврата, а затем использовать pd.set_index()
  4. Основная идея: вы создаете 2 цикла for: один, скажем, для статического компонента (внешний l oop), другой для динамического c компонент (внутренний l oop).
  5. В вашем примере:
    • a1 b1 c1 d1
    • a1 b1 c1 d1
    • a2 b1 c1 d1

Статический - это «b1 c1 d1», а динамический c - это «a1» -> «a2».

После одной итерации статическая составляющая должна измениться «b1 c1 d1» -> «b2 c2 d2». Все итерации должны завершаться sh добавлением набора в список (list.append(set)), который вы создали.

После операций, описанных выше, вам необходимо отфильтровать это. Шаги:

  1. Создайте пустой dict, где ключ представляет собой представление уникального элемента, а значение - количество раз, когда он появляется
  2. Сделайте для l oop например:
    for set in list_of_sets: if set not in dict: dict[set] = 1 else: dict[set] += 1

Или вы можете использовать collection.Counter или np.unique() ( ПРИМЕР ).
Надеюсь, это поможет вам с вашей задачей.

...