Python 将具有未排序索引的多个数据帧中的值插入到另一个数据帧中的现有列中

Python 将具有未排序索引的多个数据帧中的值插入到另一个数据帧中的现有列中,python,pandas,Python,Pandas,我有一个函数,可以创建多个带有未排序索引的数据帧。我想根据索引将这些数据帧中的值添加到另一个数据帧中的现有列中 要理解我的意思: # original dataframe df_original = pd.DataFrame({'a':range(8), 'b':range(8)}) df_original['c'] = np.nan a b c 0 0 0 NaN 1 1 1 NaN 2 2 2 NaN 3 3 3 NaN 4 4 4 NaN 5 5 5

我有一个函数,可以创建多个带有未排序索引的数据帧。我想根据索引将这些数据帧中的值添加到另一个数据帧中的现有列中

要理解我的意思:

# original dataframe
df_original = pd.DataFrame({'a':range(8), 'b':range(8)})
df_original['c'] = np.nan

   a  b   c
0  0  0 NaN
1  1  1 NaN
2  2  2 NaN
3  3  3 NaN
4  4  4 NaN
5  5  5 NaN
6  6  6 NaN
7  7  7 NaN
My函数使用未排序的索引逐个返回数据帧:

# first df that is returned
df1 = pd.DataFrame(index=range(1,8,2), data=range(4), columns=['c'])

   c
1  0
3  1
5  2
7  3

# second df that is returned
df2 = pd.DataFrame(index=range(0,8,2), data=range(4), columns=['c'])

   c
0  0
2  1
4  2
6  3
我想通过索引将这两个数据帧中的c列添加到原始数据帧的c列中的c列,因此我最终得到:

# original dataframe in the end
    a   b   c
0   0   0   0
1   1   1   0
2   2   2   1
3   3   3   1
4   4   4   2
5   5   5   2
6   6   6   3
7   7   7   3
我怎样才能有效地做到这一点?我真正的原始数据帧包含大约100k行,函数每次调用时返回大约100个值。最后,c列中不会出现
np.nan

我目前正在循环函数末尾的每个新数据帧,并使用
df_original.set_value()
更改原始数据帧中的值。一定有更好的办法吗


我还想用所有新的数据帧做
df_temp=pd.concat((df1,df2…,axis=0)
,然后用
pd.concat((df_original,df_temp),axis=1)完成。您将如何做到这一点?

在我看来,双
concat
解决方案很好

另一种选择是使用:


一个简单的作业就足以做到这一点,即

df_original['c'] = pd.concat([df1,df2])
输出:

a b c 0 0 0 0 1 1 1 0 2 2 2 1 3 3 3 1 4 4 4 2 5 5 5 2 6 6 6 3 7 7 7 3 a、b、c 0 0 0 0 1 1 1 0 2 2 2 1 3 3 3 1 4 4 4 2 5 5 5 2 6 6 6 3 7 7 7 3
在我看来,你用双concat的解决方案很好。在写问题的时候,我想到了双concat的解决方案。不过我还没有试过。我以后再做,然后接受答案!这是一个很好的解决方案,但我必须说,我有点惊讶它的工作。我的意思是,我很惊讶这个
dfu original['c']=pd.concat([df1,df2])
产生的结果与
dfu original['c']=pd.concat([df2,df1])
相同,而
pd.concat([df2,df1])
pd.concat([df1,df2])
排序不一样。所以,如果我做对了,
=
作为索引上的联接工作?分配时,熊猫会查找匹配的索引,然后分配数据。所以你不需要加入。 a b c 0 0 0 0 1 1 1 0 2 2 2 1 3 3 3 1 4 4 4 2 5 5 5 2 6 6 6 3 7 7 7 3