Mon ensemble de données ressemble à ceci:
Country | ProductType USA | A USA | B China | A China | B Japan | A Japan | B Ireland | A Ireland | B France | A France | B
Je dois dupliquer l'occurrence de chaque pays et attribuer une valeur correspondante dans la colonne ProductType pour donner à chaque pays le produit A et B. p>
Ce que je recherche:
Country | ProductType USA | A China | B Japan | A Ireland | B France | A
Des idées sur la manière pythonique de faire cela? Désolé pour le titre terriblement vague. Cheers :)
3 Réponses :
Utilisez pd.melt , comme suit:
df['A'] = 'A'
df['B'] = 'B'
pd.melt(df, id_vars='Country', value_vars=['A', 'B']).sort_values('Country')
Vous pouvez essayer quelque chose comme ceci pour créer un nouveau dataframe avec un constructeur en utilisant product d'itertools.
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
Résultat:
from itertools import product pd.DataFrame(product(df['Country'].unique(), df['ProductType'].unique()), columns=['Country','ProductType'])
TypeError: l'argument de données ne peut pas être un itérateur
Quelle version de python utilisez-vous? et quelle version de pandas?
Python 3.7.1, Pandas '0.23.4'
Dans les pandas, vous pouvez le faire avec 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
Pourquoi voulez-vous dupliquer des valeurs? Quel est votre objectif final? On dirait que ProductType n'est pas une colonne importante.
Bonjour, je ne duplique pas productType, mais je duplique le pays afin qu'un pays répertorié ait à la fois le produit A et le produit B.