Как вставить значения из списка в существующий столбец - PullRequest
0 голосов
/ 04 января 2019

Я хотел бы добавить одно или несколько значений в существующий фрейм данных.Мой фрейм данных выглядит так:

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

У меня есть список, в котором иногда может быть 1 или несколько пользователей.

x = ['user5', 'user6']

Поэтому я хочу просто добавить дополнительных пользователей в списке в столбец AЭто должно сработать, если в списке есть только одно или несколько значений, так как это выполняется через цикл.

Не будет никакого значения для столбца B от пользователей, добавляемых в столбец A из списка.Значение столбца B будет просто равно Nan

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

Когда я выполняю приведенный ниже код, я не вижу увеличения размера моего Dataframe.

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

Мой код работает нормально, вплоть до точкивставки данных.

Ответы [ 4 ]

0 голосов
/ 04 января 2019

Если серия A представляет уникальный идентификатор, рассмотрите возможность сделать его индексом.Затем вы можете использовать методы pd.Index.difference и pd.DataFrame.reindex:

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

Если вы хотите снова повысить индекс до серии, вы можете 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
0 голосов
/ 04 января 2019

Создайте новый DataFrame и append или concat в исходное состояние:

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

Другое решение с 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
0 голосов
/ 04 января 2019

Просто другой подход:

Существующий фрейм данных:

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

Новый список пользователей, который необходимо добавить:

x = ['user5', 'user6']

Решение: Просто через цикл с методом pandas.DataFrame.append.

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
0 голосов
/ 04 января 2019

Вы можете создать новый фрейм данных с новыми данными и добавить его к существующему:

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

pd.concat также работает:

df = pd.concat([df, a], ignore_index=Trie)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...