在Pandas DataFrame中添加行,保持索引顺序

时间:2014-06-16 13:43:42

标签: python pandas dataframe

我有DataFrame,我想添加一些不存在的行。我找到了.loc方法,但这会在最后添加值,而不是按排序方式添加。例如

import numpy as np
import pandas as pd

dfi = pd.DataFrame(np.arange(6).reshape(3,2),columns=['A','B'])

>>> dfi
    A B
0   0 1
1   2 3
2   4 5
[3 rows x 2 columns]

通过.loc添加不存在的行:

dfi.loc[5,:] = 0
>>> dfi
    A B
0   0 1
1   2 3
2   4 5
5   0 0
[3 rows x 2 columns]

到目前为止一切正常。但这是尝试添加另一行时发生的情况,索引小于最后一行:

dfi.loc[3,:] = 0
>>> dfi
    A B
0   0 1
1   2 3
2   4 5
5   0 0
3   0 0
[3 rows x 2 columns]

我希望将行32之间的行5放在一起。我可以每次按索引对DataFrame进行排序,但这需要太长时间。还有另一种方式吗?

我的实际问题是考虑DataFrame,其中索引是datetime个对象。我没有把这个实现的全部细节放在这里,因为这会混淆我真正的问题:在DataFrame中添加行,使得结果具有有序索引。

1 个答案:

答案 0 :(得分:1)

如果您的索引几乎是连续的,那么此处和那里只会遗漏几个值。我想你可以试试以下,

In [15]:

df=pd.DataFrame(np.zeros((100,2)), columns=['A', 'B'])
df['A']=np.nan
df['B']=np.nan
In [16]:

df.iloc[[0,1,2]]=pd.DataFrame({'A': [0,2,4,], 'B': [1,3,5]})
df.iloc[5]=[0,0]
df.iloc[3]=0
print df.dropna()
   A  B
0  0  1
1  2  3
2  4  5
3  0  0
5  0  0

[5 rows x 2 columns]