假设您有一个数据框
df = pd.DataFrame({'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':
[28,34,29,42]})
和另一个数据框
df1 = pd.DataFrame({'Name':['Anna', 'Susie'],'Age':[20,50]})
以及带有索引的列表
pos = [0,2].
在pos中指定的df的索引位置之前,将df1集成到df的新数据帧df2的最有效方法是什么?
因此,新数组应如下所示:
df2 =
Age Name
0 20 Anna
1 28 Tom
2 34 Jack
3 50 Susie
4 29 Steve
5 42 Ricky
非常感谢您。
最好
内森
答案 0 :(得分:1)
具有浮点索引的棘手解决方案:
df = pd.DataFrame({'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age': [28,34,29,42]})
df1 = pd.DataFrame({'Name':['Anna', 'Susie'],'Age':[20,50]}, index=[-0.5, 1.5])
result = df.append(df1, ignore_index=False).sort_index().reset_index(drop=True)
print(result)
输出:
Name Age
0 Anna 20
1 Tom 28
2 Jack 34
3 Susie 50
4 Steve 29
5 Ricky 42
在创建index
时注意df1
参数。您可以使用简单的列表理解从index
来构建pos
:
[x - 0.5 for x in pos]
答案 1 :(得分:0)
您要搜索的行为是由numpy.insert
实现的,但是,这对于pandas.DataFrame
对象来说效果不佳,但是没有问题的pandas.DataFrame
对象具有{{1 }}内(根据各种因素的不同,可能是多个数组,但您可以将它们视为可以通过numpy.ndarray
参数访问的数组)。
您只需要重构数据帧的.values
,但是否则,我怀疑这是最简单,最快的方法:
columns
因此,这将返回一个数组,但是此数组正是您制作数据帧所需要的!而且您还有其他元素,即In [1]: import pandas as pd, numpy as np
In [2]: df = pd.DataFrame({'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':
...: [28,34,29,42]})
In [3]: df1 = pd.DataFrame({'Name':['Anna', 'Susie'],'Age':[20,50]})
In [4]: np.insert(df.values, (0,2), df1.values, axis=0)
Out[4]:
array([['Anna', 20],
['Tom', 28],
['Jack', 34],
['Susie', 50],
['Steve', 29],
['Ricky', 42]], dtype=object)
已经在原始数据帧上,因此您可以执行以下操作:
columns
因此您只需要一行即可。