Цикл Python For для обновления фрейма данных - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь воссоздать макрос VBA, который у меня есть, используя Python.Может ли кто-нибудь сказать мне утверждение FOR, которое я должен использовать, чтобы получить результат ниже?Большое спасибо.

файл 1:

Product Colour  Price
Book    NaN 5
Table   NaN 10
Chair   NaN 7

файл 2:

Colour 
Blue 
Red 
Green

Ожидаемый результат (файл 1) после цикла:

Product Colour Price    
Book    Blue    5
Table   Blue    10
Chair   Blue    7
Book    Red 5
Table   Red 10
Chair   Red 7
Book    Green   5
Table   Green   10
Chair   Green   7

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы можете использовать понимание списка, аналогичное вложенному циклу for:

df = pd.DataFrame([[product, colour, price] for colour in df2['Colour'] \
                   for product, price in zip(df1['Product'], df1['Price'])],
                  columns=['Product', 'Colour', 'Price'])

print(df)

  Product Colour  Price
0    Book   Blue      5
1   Table   Blue     10
2   Chair   Blue      7
3    Book    Red      5
4   Table    Red     10
5   Chair    Red      7
6    Book  Green      5
7   Table  Green     10
8   Chair  Green      7
0 голосов
/ 06 октября 2018

Сначала дублируйте значения df1 длиной df2, а затем используйте list comprehesion и chain для Colour как:

from itertools import chain


df = pd.DataFrame({'Product': df1['Product'].values.tolist()*len(df2),
                   'Price'  : df1['Price'].values.tolist()*len(df2),
                   'Colour' : list(chain.from_iterable([[v]*len(df1) for v in df2['Colour'].values.tolist()]))})

print(df)
  Product  Price Colour
0    Book      5   Blue
1   Table     10   Blue
2   Chair      7   Blue
3    Book      5    Red
4   Table     10    Red
5   Chair      7    Red
6    Book      5  Green
7   Table     10  Green
8   Chair      7  Green
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...