pandas 如何将列表中的值插入现有列

but5z9lq  于 2023-01-24  发布在  其他
关注(0)|答案(4)|浏览(192)

我想向现有 Dataframe 添加一个或多个值。我的 Dataframe 如下所示:

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

我有一个列表,有时会有1个或多个用户。

x = ['user5', 'user6']

因此,我想简单地将列表中的其他用户添加到列A中。如果列表中只有一个或多个值,这将需要工作,因为这是通过循环运行的。
从列表中添加到A列的用户不会为B列提供任何值。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

我的代码工作正常,直到插入数据为止。

nuypyhwy

nuypyhwy1#

只是另一种方法:

现有数据框:

>>> 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
h7wcgrx3

h7wcgrx32#

创建新的数据框和原始数据框的appendconcat

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
ffvjumwh

ffvjumwh3#

您可以使用新数据创建一个新 Dataframe ,并将其附加到现有 Dataframe 中:

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

pd.concat同样适用于:

df = pd.concat([df, new], ignore_index=True)
ztmd8pv5

ztmd8pv54#

如果系列A表示唯一标识符,请考虑将其作为索引。然后可以使用pd.Index.differencepd.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

相关问题