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

2024-06-16 23:15:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个特定大小的pandas数据框,比如:

   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,以与dataframe中相同大小的行的特定频率来分布。在这个例子中,假设我有7行2项,7/2的整数商是3,所以我想把第一项放在3行中,下一项放在剩下的4行中。所以输出应该是:

^{pr2}$

到目前为止,我所能做的就是用

 df_s = pd.DataFrame(X)

这给了我

     0
    GAB
    YER

但是,我不能用X中的值从这个数据帧的形状中创建一个序列,也不能找到一种方法来分发它。我仍在努力,但专家的一些帮助/提示将不胜感激。在


Tags: 数据项目iddataframepandasabslevelgab
2条回答

使用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,请使用

^{pr2}$

使用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

相关问题 更多 >