How To Insert Values From A List Into An Existing Column

Viewed 5145

I would like to add one or more values to existing dataframe. My dataframe looks like:

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

I have a list that will sometimes have 1 or multiple users.

x = ['user5', 'user6']

So I want to simple add additional users in the list to column A. This will need to work if there are only one or more values in the list as this is running through a loop.

There won't be any value for column B from users being added to Column A from the list. Column B value will just be Nan

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

When I perform the code below, I do not see my Dataframe size increase.

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

My code works fine, up to the point of inserting the data.

4 Answers

Just another approach:

Existing DataFrame:

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

New List of Users to be added:

x = ['user5', 'user6']

Solution : Just via a loop with pandas.DataFrame.append method.

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

You can make a new dataframe with the new data and append it to your existing one:

new = pd.DataFrame(columns=df.columns)
new['A'] = xList
df = df.append(a, ignore_index=True)

pd.concat also works:

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

Create new DataFrame and append or concat to original:

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

Another solution with setting with enlargement:

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

If series A represents a unique identifier, consider making it your index. You can then use pd.Index.difference and pd.DataFrame.reindex methods:

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

If you wish to elevate the index to a series again, you can reset_index:

print(df.reset_index())

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