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