Я хочу намеренно дублировать значения в python - PullRequest
0 голосов
/ 23 января 2020

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

Я хочу скопировать эти даты кратными длине второго списка. Есть ли более простой способ сделать это?

Спасибо за вашу помощь.

Список A: Дата

1. 1/1/20
2. 1/2/20
3. 1/3/20
4. 1/4/20
5. 1/5/20
6. 1/6/20
7. 1/7/20
8. 1/8/20
9. 1/9/20
10. 1/10/20

Список B: Идентификатор продукта:

1. BOM-12345
2. PEN-98765
3. BUN-45785

Теперь я хочу скопировать эти даты перед идентификатором продукта 10 раз для идентификатора продукта.

Ожидаемый результат:

1. BOM-12345   1/1/20
2. BOM-12345   1/2/20
...                   ...
10. BOM-12345 1/10/20
11. PEN-98765  1/1/20
..     ..
20. PEN-98765 1/10/20
..    ..
30  BUN-45785 1/10/20

Ответы [ 2 ]

1 голос
/ 23 января 2020

Попробуйте:

lista = pd.read_clipboard(sep='\.\s', names=['index','Date'])
listb = pd.read_clipboard(sep='\.\s', names=['index','Product ID'])

df = pd.MultiIndex.from_product([listb['Product ID'], lista['Date']], names=['Product ID', 'Date']).to_frame()
df_out = df.sort_index().reset_index()
print(df_out)

Вывод:

   Product ID     Date
0   BOM-12345   1/1/20
1   BOM-12345  1/10/20
2   BOM-12345   1/2/20
3   BOM-12345   1/3/20
4   BOM-12345   1/4/20
5   BOM-12345   1/5/20
6   BOM-12345   1/6/20
7   BOM-12345   1/7/20
8   BOM-12345   1/8/20
9   BOM-12345   1/9/20
10  BUN-45785   1/1/20
11  BUN-45785  1/10/20
12  BUN-45785   1/2/20
13  BUN-45785   1/3/20
14  BUN-45785   1/4/20
15  BUN-45785   1/5/20
16  BUN-45785   1/6/20
17  BUN-45785   1/7/20
18  BUN-45785   1/8/20
19  BUN-45785   1/9/20
20  PEN-98765   1/1/20
21  PEN-98765  1/10/20
22  PEN-98765   1/2/20
23  PEN-98765   1/3/20
24  PEN-98765   1/4/20
25  PEN-98765   1/5/20
26  PEN-98765   1/6/20
27  PEN-98765   1/7/20
28  PEN-98765   1/8/20
29  PEN-98765   1/9/20
1 голос
/ 23 января 2020

Я рекомендую использовать списки, так что:

listA = [--snip--]  # your first list.
listB = [--snip--]  # the second one.

listC = [[x + y for x in listB] for y in listA]  # pairs the two together, so the first list has a value for each value in the second.

Это сделает это намного проще, хотя и менее читабельным. Если вы предпочитаете удобочитаемость, используйте полное значение для l oop:

listA = [--snip--]
listB = [--snip--]

listC = []

for date in listA:
    for item_id in listB:
        listC.append(date + item_id)

Это действительно то, что вы предпочитаете, но мне больше нравится понимание списка, чтобы уменьшить размер файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...