2 votes

mettre à jour les valeurs dans le cadre de données

J'ai un cadre de données dans lequel la deuxième colonne est un tableau. J'ai un autre dataframe qui a 2 colonnes, dont la valeur doit être mise à jour dans le premier dataframe.

J'ai déjà essayé d'utiliser les méthodes update, explode, map, assign.

df = pd.DataFrame({'Account': ['A1','A2','A3']})

groups = np.array([['g1','g2'],['g3','g4'],['g1','g2','g3']])

df["Group"] = groups.tolist()

key_values = pd.DataFrame({'ID': ['1','2','3','4','5'],'Group': ['g1','g2','g3','g4','g5']})
keys = key_values.set_index('Key')['ID']

ag = Accounts_Group.explode('Group')

0voto

Billy Bonaros Points 1393

Tout d'abord, convertissez-les en chaînes de caractères et remplacez-les. Ensuite, vous pouvez les convertir à nouveau en liste à partir d'une chaîne de caractères en utilisant ast

import ast
df['keys']=df.astype(str).replace(to_replace=list(key_values['Group']),value=list(key_values['ID']),regex=True)['Group']
df['keys']=df['keys'].apply(lambda x: ast.literal_eval(x))

print(df)

  Account         Group       keys
0      A1      [g1, g2]     [1, 2]
1      A2      [g3, g4]     [3, 4]
2      A3  [g1, g2, g3]  [1, 2, 3]

0voto

user3483203 Points 28606

Configuration

m = key_values.set_index('Group')['ID']

Option 1
explode + map

f = df.explode('Group')

res = f['Group'].map(m).groupby(level=0).agg(list)

0       [1, 2]
1       [3, 4]
2    [1, 2, 3]
Name: Group, dtype: object

Option 2
Compréhension de la liste + map

res = [[*map(m.get, el)] for el in df['Group']]

[['1', '2'], ['3', '4'], ['1', '2', '3']]

Pour la réattribuer :

df.assign(Group=res)

  Account      Group
0      A1     [1, 2]
1      A2     [3, 4]
2      A3  [1, 2, 3]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X