Python 从项目列表创建特定形状的数据框

Python 从项目列表创建特定形状的数据框,python,arrays,pandas,list,Python,Arrays,Pandas,List,我有一个特定尺寸的熊猫数据框,比如: ID FACTOR LEVEL 160 SPM P 159 SPM2 S 851 ABS K 415 ABS P 202 ABS P 205 ABS2

我有一个特定尺寸的熊猫数据框,比如:

   ID  FACTOR    LEVEL
  160  SPM       P                       
  159  SPM2      S                         
  851  ABS       K                        
  415  ABS       P                       
  202  ABS       P 
  205  ABS2      Q
  207  AQE       T 
我想做的是,我有一个清单,上面有两个项目: X=['GAB','YER']

所以我想做的是,我想在列表中以一个新列(比如NewCol)的形式分发这些项,其特定频率与数据帧中行的大小相同。在本例中,假设我有7行2项,7/2整数商是3,那么我想把第一项放在3行,下一项放在剩下的4行。因此,输出应该如下所示:

         ID  FACTOR    LEVEL  NewCol
        160  SPM       P        GAB               
        159  SPM2      S        GAB                 
        851  ABS       K        GAB               
        415  ABS       P        YER               
        202  ABS       P        YER
        205  ABS2      Q        YER
        207  AQE       T        YER
到目前为止,我能做的就是使用

 df_s = pd.DataFrame(X)
这给了我

     0
    GAB
    YER

然而,我无法用X中的值创建一个数据帧形状的系列,也无法找到一种方法来分发它。我仍在研究中,但专家们的一些帮助/提示将不胜感激。

使用
np。重复
并将结果分配到新列:

arr = np.repeat(X, len(df) // len(X))
df['NewCol'] = pd.Series(arr, index=df.index[:len(arr)])
df

    ID FACTOR LEVEL NewCol
0  160    SPM     P    GAB
1  159   SPM2     S    GAB
2  851    ABS     K    GAB
3  415    ABS     P    YER
4  202    ABS     P    YER
5  205   ABS2     Q    YER
6  207    AQE     T    NaN
如果要填写最后一个NaN,请使用

df['NewCol'] = df['NewCol'].ffill()

使用
clip

import numpy as np 
n=len(X)
m=len(df)//n 
s=pd.Series(np.arange(len(df))//m).clip_upper(n-1)
df['New']=s.map(dict(zip(s.unique(),X)))
df
Out[278]: 
    ID FACTOR LEVEL  New
0  160    SPM     P  GAB
1  159   SPM2     S  GAB
2  851    ABS     K  GAB
3  415    ABS     P  YER
4  202    ABS     P  YER
5  205   ABS2     Q  YER
6  207    AQE     T  YER

是的,这是一种新方法,我以前从未使用过。学会了一个新东西!谢谢