UPDATE:存儲器中保存方法 - 先設置一個新的索引與新行差距:
In [30]: df
Out[30]:
Col1 Col2 Col3
0 A B 1
1 B C 1
2 D E 1
3 E F 1
如果我們要插入索引1
和2
之間的新行,我們在2
位置拆分指數:
In [31]: idxs = np.split(df.index, 2)
設置一個新的指數(與差距在位置2
):
In [32]: df.set_index(idxs[0].union(idxs[1] + 1), inplace=True)
In [33]: df
Out[33]:
Col1 Col2 Col3
0 A B 1
1 B C 1
3 D E 1
4 E F 1
插入新行的索引2
:
In [34]: df.loc[2] = ['X','X',2]
In [35]: df
Out[35]:
Col1 Col2 Col3
0 A B 1
1 B C 1
3 D E 1
4 E F 1
2 X X 2
排序索引:
In [38]: df.sort_index(inplace=True)
In [39]: df
Out[39]:
Col1 Col2 Col3
0 A B 1
1 B C 1
2 X X 2
3 D E 1
4 E F 1
PS你也可以插入數據幀代替單行使用df.append(new_df)
:
In [42]: df
Out[42]:
Col1 Col2 Col3
0 A B 1
1 B C 1
2 D E 1
3 E F 1
In [43]: idxs = np.split(df.index, 2)
In [45]: new_df = pd.DataFrame([['X', 'X', 10], ['Y','Y',11]], columns=df.columns)
In [49]: new_df.index += idxs[1].min()
In [51]: new_df
Out[51]:
Col1 Col2 Col3
2 X X 10
3 Y Y 11
In [52]: df = df.set_index(idxs[0].union(idxs[1]+len(new_df)))
In [53]: df
Out[53]:
Col1 Col2 Col3
0 A B 1
1 B C 1
4 D E 1
5 E F 1
In [54]: df = df.append(new_df)
In [55]: df
Out[55]:
Col1 Col2 Col3
0 A B 1
1 B C 1
4 D E 1
5 E F 1
2 X X 10
3 Y Y 11
In [56]: df.sort_index(inplace=True)
In [57]: df
Out[57]:
Col1 Col2 Col3
0 A B 1
1 B C 1
2 X X 10
3 Y Y 11
4 D E 1
5 E F 1
OLD答案:
一個(在許多)的方式來實現,這將是分裂的DF和期望的順序與需要的DF級連在一起的:
原DF:
In [12]: df
Out[12]:
Col1 Col2 Col3
0 A B 1
1 B C 1
2 D E 1
3 E F 1
讓我們把它分割成兩個部分([0:1],[2:結束):
In [13]: dfs = np.split(df, [2])
In [14]: dfs
Out[14]:
[ Col1 Col2 Col3
0 A B 1
1 B C 1, Col1 Col2 Col3
2 D E 1
3 E F 1]
現在我們可以一起用新的DF所需順序串連它:
In [15]: pd.concat([dfs[0], pd.DataFrame([['C','D', 1]], columns=df.columns), dfs[1]], ignore_index=True)
Out[15]:
Col1 Col2 Col3
0 A B 1
1 B C 1
2 C D 1
3 D E 1
4 E F 1
這可能是更容易插入的列而不是行。也許你可以先調換數據幀,將新數據作爲新列插入,然後重新轉置以恢復原始表。只是一個猜測。 –
什麼決定了新行的內容?是否會像玩具例子那樣「修復」序列? – ASGM
@Tammo Heeren,我會給你一個機會,看看這是否有益。 @ ASGM,新行的內容是Col1從前一行獲取Col2的值,Col2從前進的行獲取Col1的值,同時爲所有其他列獲取前一行的值。一個很好的例子是在我期望的輸出表中,我將Col1和Col2的值作爲C和D(前一個Col1和繼續Col1),同時將Col3的值(Col3前一個值)作爲1。讓我知道,如果這是有道理的 – Mike