从项目列表中创建一个特定形状的熊猫数据框



我有一个pandas dataframe f特定尺寸说:

   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行将其放在剩下的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.repeat并将结果分配给新列:

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

最新更新