J'ai un dataframe comme ci-dessous:
def get_cards(x):
extra = {'S', 'A','M', 'E', 'G','D'}.difference(set(x))
x=x.append(pd.Series(list(extra)))
return ",".join(x.tolist())
temp1.groupby(['Card_x','Country', 'Age', 'Code'])['Card_y'].apply(lambda x: get_cards(x) ).reset_index()
Mon Dataframe attendu:
Card_x Country Age Code Card_y S INDIA Adult Garments S,E,D,G,M,A S INDIA Adult Grocery D,S,G,A,M,E
Explication: Je veux obtenir les cartes classées dans "Card_y" en fonction des valeurs de "Diff" pour chaque "Code"
Par exemple.
J'ai essayé le code ci-dessous:
Card_x Country Age Code Card_y Diff S INDIA Adult Garments S 9.2 S INDIA Adult Grocery S 21.33 S INDIA Adult Garments M 151.4 S INDIA Adult Grocery M 202.15 S INDIA Adult Grocery G 48.7 S INDIA Adult Garments G 126.82 S INDIA Adult Garments E 19.17 S INDIA Adult Grocery E 276.09 S INDIA Adult Grocery D 3.05 S INDIA Adult Garments D 69.43 S INDIA Adult Grocery A 109.47 S INDIA Adult Garments A 161.75
Mais je n'ai pas obtenu les résultats escomptés.
3 Réponses :
Essayez :
Card_x Country Age Code Card_y 0 S INDIA Adult Garments S,E,D,G,M,A 1 S INDIA Adult Grocery D,S,G,A,M,E
Sortie:
df.sort_values('Diff').groupby(['Card_x','Country','Age','Code'])['Card_y']\
.agg(','.join).reset_index()
Pas dans la liste alors utilisez
Card_x Country Age Code Card_y 0 S INDIA Adult Garments [S, E, D, G, M, A] 1 S INDIA Adult Grocery [D, S, G, A, M, E]
Sortie:
df.sort_values('Diff').groupby(['Card_x','Country','Age','Code'])['Card_y']\
.agg(list).reset_index()
Merci, mais les valeurs de Card_y ne devraient pas figurer dans une liste.
Utilisez sort_values avec groupby et join:
df = df.sort_values(['Card_x','Country', 'Age', 'Code', 'Diff'])
df1 = (df.groupby(['Card_x','Country', 'Age', 'Code'])['Card_y']
.apply(','.join)
.reset_index())
print (df1)
Card_x Country Age Code Card_y
0 S INDIA Adult Garments S,E,D,G,M,A
1 S INDIA Adult Grocery D,S,G,A,M,E
Merci @jezrael, celui-ci fonctionne également. Mais depuis que j'ai utilisé le premier code, j'ai dû l'accepter. Merci encore.
Je voudrais commencer par trier votre DataFrame, puis GroupBy Card_y et obtenir une liste. Cela devrait faire l'affaire.
df.sort_values("Diff").groupby(["Card_x", "Country","Age","Code"])["Card_y"].apply(list).reset_index()
Merci @Nathan Quinteiro, mais depuis que j'ai utilisé le premier code, j'ai dû l'accepter. Merci encore.