python - 从项目列表创建特定形状的 Pandas 数据框

标签 python arrays pandas list

我有一个特定大小的 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)分发,其特定频率与数据框中行的大小相同。所以在这种情况下,假设我有 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.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()

关于python - 从项目列表创建特定形状的 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247580/

相关文章:

python - Python 的 numpy 中的 "zip()"相当于什么?

javascript改变数组中的元素

MySql 几何 : How to populate table with a multipolygon from an multi-dimensional array?

python - 使用 apply、transform、agg - Python Pandas 时如何引用 groupby 索引?

python - 使用 Python,以整数形式获取当前月份的日期

python - 如何修复 IPython 的 "ImportError: no module named shell"错误

python - 如何在 Python 多处理中的所有进程之间共享数据?

python - Pandas .round() 未按要求四舍五入

Python - Pandas 数据帧连接内存中的气球

python - 使用 Pandas 仅获取每组的第一行和最后一行