4
votes

Comment insérer des valeurs d'une liste dans une colonne existante

Je souhaite ajouter une ou plusieurs valeurs au dataframe existant. Mon dataframe ressemble à:

for x,n in zip(u,grps):
    # Filter Dataframe based on X and create new Dataframe
    df=raw.df[raw.df[raw.df.header['User']].isin(x)]
    #Create List of difference between new Dataframe and List X
    xList=(list(set(x)-set(df['User'])))
    # Add xList of Users to df Column
    df.loc[len(df)]=xList

J'ai une liste qui aura parfois 1 ou plusieurs utilisateurs.

    A    B
0 user1  value
1 user2  value
2 user3  value
3 user4  value
4 user5  nan
5 user6  nan

Je veux donc simplement ajouter utilisateurs supplémentaires dans la liste de la colonne A. Cela devra fonctionner s'il n'y a qu'une ou plusieurs valeurs dans la liste car celle-ci passe par une boucle.

Il n'y aura aucune valeur pour la colonne B des utilisateurs ajoutés à la colonne A de la liste. La valeur de la colonne B sera juste Nan

x = ['user5', 'user6']

Lorsque j'exécute le code ci-dessous, je ne vois pas ma taille de Dataframe augmenter.

    A    B
0 user1  value
1 user2  value
2 user3  value
3 user4  value

Mon code fonctionne correctement, jusqu'au point d'insérer les données.


0 commentaires

4 Réponses :


1
votes

Vous pouvez créer un nouveau dataframe avec les nouvelles données et l'ajouter à votre existant:

df = pd.concat([df, a], ignore_index=Trie)

pd.concat fonctionne également:

XXX


0 commentaires

2
votes

Créez un nouveau DataFrame et ajoutez ou concat code> à l'original:

xList= list(set(x)-set(df['User']))
for i in xList:
    df.loc[len(df), 'User'] = i
print (df)
    User  Value
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN

Une autre solution avec réglage avec agrandissement :

print (df)
    User  Value
0  user1  value
1  user2  value
2  user3  value
3  user4  value

x = ['user5', 'user6']
xList= list(set(x)-set(df['User']))
df = df.append(pd.DataFrame({'User': xList}), ignore_index=True)
#alternative
#df = pd.concat([df, pd.DataFrame({'User': xList})], ignore_index=True)

print (df)
    User  Value
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN


1 commentaires

Vous êtes génial @jezrael +1.



1
votes

Juste une autre approche:

DataFrame existant:

for i in x:
    df = df.append({'A': i}, ignore_index=True)

print(df)
       A      B
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN

Nouvelle liste d'utilisateurs à ajouter:

x = ['user5', 'user6']

Solution: juste via une boucle avec la méthode pandas.DataFrame.append .

>>> df
       A      B
0  user1  value
1  user2  value
2  user3  value
3  user4  value


0 commentaires

1
votes

Si la série A représente un identifiant unique, envisagez d'en faire votre index. Vous pouvez ensuite utiliser pd.Index.difference et pd.DataFrame.reindex méthodes:

print(df.reset_index())

       A      B
0  user1  value
1  user2  value
2  user3  value
3  user4  value
4  user5    NaN
5  user6    NaN

Si vous souhaitez élever à nouveau l'index à une série, vous pouvez reset_index :

df = df.set_index('A')
x = pd.Index(['user5', 'user6'])

new_users = x.difference(df.index)

df = df.reindex(df.index.union(new_users))
# alternative:
# df = df.reindex(np.hstack((df.index, new_users)))

print(df)

           B
A           
user1  value
user2  value
user3  value
user4  value
user5    NaN
user6    NaN


1 commentaires

@ jpp, gentil +1