我需要为每个组插入缺少的类别,这是一个示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({ "group":[1,1,1 ,2,2],
                   "cat": ['a', 'b', 'c', 'a', 'c'] ,
                   "value": range(5),
                   "value2": np.array(range(5))* 2})

df

# test dataframe

cat group   value value2
a   1         0   0
b   1         1    2
c   1         2    4
a   2         3    6
c   2         4    8

说我有一些categories = ['a', 'b', 'c', 'd']。如果cat
不包含列表中的类别,我想插入
对于每组,其值0为一行。
如何在类别中为每个组插入一行,以便获取每个组的所有类别
cat group   value  value2
a   1         0    0
b   1         1    2
c   1         2    4
d   1         0    0
a   2         3    6
c   2         4    8
b   2         0    0
d   2         0    0

最佳答案

有点复杂,但是您可以使用groupby + reindex:

categories = ['a', 'b', 'c', 'd']

def f(x):
    return x.reindex(categories, fill_value=0)\
                   .assign(group=x['group'][0].item())

df.set_index('cat').groupby('group', group_keys=False).apply(f).reset_index()


  cat  group  value  value2
0   a      1      0       0
1   b      1      1       2
2   c      1      2       4
3   d      1      0       0
4   a      2      3       6
5   b      2      0       0
6   c      2      4       8
7   d      2      0       0

10-04 16:10
查看更多