簡體   English   中英

將行添加到熊貓數據框中的組

[英]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

因此,您的代碼應:

  1. 創建一個新的DataFrame
  2. 查找表的拆分位置(使用列a
  3. 將切片從現有表追加到新的DataFrame
  4. 創建新的數據位
  5. 將新數據追加到新的DataFrame
  6. 根據需要重復步驟2-5。

(或者,如果發現比較容易,則可以串聯而不是附加。)要考慮的一件事是對索引的處理方式。 如果不使用它們,則可以通過在concatappend上使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM