将行添加到 pandas 数据框中的组

use*_*329 5 python group-by dataframe pandas

我有一个 pandas 数据框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
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

     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
Run Code Online (Sandbox Code Playgroud)

我想在 column 中的每个分组之后插入 3 行'a'。具体来说,我想在列中进行一些自动增量'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
Run Code Online (Sandbox Code Playgroud)

DrV*_*DrV 4

您想要做的并不是真正的插入操作,因为背后的数据结构DataFrame不允许简单的插入。因此,从本质上讲,您将必须DataFrame从旧的部分构建新的DataFrame

所以,你的代码应该:

  1. 创建一个新的DataFrame
  2. 查找拆分表的位置(通过使用 column a
  3. 将现有表中的切片附加到新表中DataFrame
  4. 创建新的数据位
  5. 将新数据追加到新数据中DataFrame
  6. 根据需要重复步骤 2-5 多次。

(或者,如果您觉得更容易的话,您可以连接而不是附加。)需要考虑的一件事是如何处理索引。如果您不使用它们,您可以通过使用或ignore_index=True上的关键字参数来忽略它们(= 根据需要创建新的) 。concatappend

了解更多信息:

http://pandas.pydata.org/pandas-docs/dev/merging.html

顺便说一句,您不一定希望None数据框中有任何 s 。如果您有数字数据,您希望拥有数字数据NaN。否则可能会发生奇怪的事情(最终会得到对象数组)。看:

http://pandas.pydata.org/pandas-docs/stable/missing_data.html