[英]add rows to groups in pandas dataframe
我有一個熊貓數據框df
。 像這樣創建:
a = np.array([0,0,0,1,1,1,2,2,2]).T
bcd = np.array([np.arange(1,10)]*3).T
df = pd.DataFrame(bcd, columns=["b","c","d"])
df["a"] = a
看起來像這樣:
b c d a
0 1 1 1 0
1 2 2 2 0
2 3 3 3 0
3 4 4 4 1
4 5 5 5 1
5 6 6 6 1
6 7 7 7 2
7 8 8 8 2
8 9 9 9 2
我想在'a'
列中'a'
每個分組之后插入3行。 具體來說,我想在列'b'
增加一些自動增量,並將“ None
對象放到其他地方:
b c d a
0 1 1 1 0
1 2 2 2 0
2 3 3 3 0
3 10 None None 0
4 11 None None 0
5 12 None None 0
6 4 4 4 1
7 5 5 5 1
8 6 6 6 1
9 10 None None 1
10 11 None None 1
11 12 None None 1
12 7 7 7 2
13 8 8 8 2
14 9 9 9 2
15 10 None None 2
16 11 None None 2
17 12 None None 2
您要做的實際上不是插入操作,因為DataFrame
后面的數據結構不允許簡單的插入。 因此,在本質上,你必須建立一個新的DataFrame
從舊的個DataFrame
。
因此,您的代碼應:
DataFrame
a
) DataFrame
DataFrame
(或者,如果發現比較容易,則可以串聯而不是附加。)要考慮的一件事是對索引的處理方式。 如果不使用它們,則可以通過在concat
或append
上使用ignore_index=True
關鍵字參數來忽略它們(=根據需要創建新的)。
欲獲得更多信息:
http://pandas.pydata.org/pandas-docs/dev/merging.html
順便說一句,您不一定要在數據框中包含任何None
。 如果您有數值數據, NaN
改用NaN
。 否則可能會發生奇怪的事情(您最終得到對象數組)。 看到:
http://pandas.pydata.org/pandas-docs/stable/missing_data.html
只需concat
要插入的插入內容(它們將被附加在后面,或df.append(the_insert)
,其作用相同),然后reset_index
結果以正確的順序得到結果:
In [137]:
df2=pd.DataFrame({'b':[11,12,13], 'a':[0]*3})
In [138]:
df3=pd.concat((df, df2)).sort('a').reset_index(drop=True)
#pd.concat((df, df2, df3, df4...., all the others...))
In [139]:
print df3
a b c d
0 0 1 1 1
1 0 2 2 2
2 0 3 3 3
3 0 11 NaN NaN
4 0 12 NaN NaN
5 0 13 NaN NaN
6 1 4 4 4
7 1 5 5 5
8 1 6 6 6
9 2 7 7 7
10 2 8 8 8
11 2 9 9 9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.