numpy 在Pandas中为每组添加零向量行

jm81lzqq  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(108)

我想从Pandas创建大小相等的numpy(填充)数组,最终作为keras模型的输入

import pandas as pd
df = pd.DataFrame([[1, 1.2, 2.2], 
                   [1, 3.2, 4.6],
                   [2, 5.5, 6.6]], columns = ['id', 'X1', 'X2']
                 )
df
>> 
   id   X1   X2
0   1   1.2  2.2
1   1   3.2  4.6
2   2   5.5  6.6

预期输出-带填充的3d numpy数组

array[
        [
          [1.2, 2.2],
          [3.2, 4.6]
        ],
        [
          [5.5, 6.6],
          [0,   0]
        ]
     ]

有人能帮帮我吗?

szqfcxe2

szqfcxe21#

使用计数器为GroupBy.cumcountDataFrame.reindex,首先追加零行:

df['g'] = df.groupby('id').cumcount()

ids = df['id'].unique()
maxg = df['g'].max()+1
df1 = (df.set_index(['id','g'])
          .reindex(pd.MultiIndex.from_product([ids, np.arange(maxg)]), fill_value=0))
print (df1)
      X1   X2
1 0  1.2  2.2
  1  3.2  4.6
2 0  5.5  6.6
  1  0.0  0.0

然后将值转换为numpy数组并重新整形为3d:

a = df1.to_numpy().reshape(len(ids), maxg, len(df1.columns))
print (a)
[[[1.2 2.2]
  [3.2 4.6]]

 [[5.5 6.6]
  [0.  0. ]]]

相关问题