Мой набор данных выглядит так:

Country | ProductType 
USA     |    A        
China   |    B        
Japan   |    A        
Ireland |    B        
France  |    A        

Мне нужно продублировать вхождение каждой страны и назначить соответствующее значение в столбце ProductType, чтобы дать каждой стране как продукт A, так и B.

Что я ищу:

Country | ProductType
USA     | A
USA     | B
China   | A
China   | B
Japan   | A
Japan   | B
Ireland | A
Ireland | B
France  | A
France  | B

Любые идеи о питоническом способе сделать это? Извините за ужасно смутное название. Ура :)

1
skiventist 2 Май 2019 в 16:22

3 ответа

Лучший ответ

Используйте pd.melt следующим образом. :

df['A'] = 'A'
df['B'] = 'B'
pd.melt(df, id_vars='Country', value_vars=['A', 'B']).sort_values('Country')
5
hacker315 2 Май 2019 в 13:30

Вы можете попробовать что-то вроде этого, чтобы построить новый фрейм данных с помощью конструктора, используя product из itertools.

from itertools import product
pd.DataFrame(product(df['Country'].unique(), df['ProductType'].unique()), columns=['Country','ProductType'])

Выход:

   Country ProductType
0      USA           A
1      USA           B
2    China           A
3    China           B
4    Japan           A
5    Japan           B
6  Ireland           A
7  Ireland           B
8   France           A
9   France           B
4
Scott Boston 2 Май 2019 в 13:35

В пандах вы можете делать с MultiIndex

pd.MultiIndex.from_product(list(map(set,df.values.T.tolist()))).to_frame()
Out[1148]: 
                 0  1
France  A   France  A
        B   France  B
China   A    China  A
        B    China  B
Japan   A    Japan  A
        B    Japan  B
USA     A      USA  A
        B      USA  B
Ireland A  Ireland  A
        B  Ireland  B
2
YO and BEN_W 2 Май 2019 в 14:01