我想向现有数据框添加一个或多个值。 我的数据框看起来像:
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
当我执行以下代码时,我看不到我的数据框大小增加。
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
我的代码可以正常工作,直到插入数据为止。
答案 0 :(得分:2)
创建新的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
答案 1 :(得分:1)
您可以使用新数据创建一个新的数据框,并将其附加到现有数据框中:
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)
答案 2 :(得分:1)
另一种方法:
现有数据框:
>>> 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
答案 3 :(得分:1)
如果系列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