Python 熊猫:使用零值创建缺少的组合行

Python 熊猫:使用零值创建缺少的组合行,python,pandas,Python,Pandas,假设我有一个数据帧df: df = pd.DataFrame({'col1': [1,1,2,2,2], 'col2': ['A','B','A','B','C'], 'value': [2,4,6,8,10]}) col1 col2 value 0 1 A 2 1 1 B 4 2 2 A 6 3 2 B 8 4 2 C 10 我正在寻找一种方法,用现有值在col1和col2的可能组合中创建任何缺少的行,

假设我有一个数据帧df:

df = pd.DataFrame({'col1': [1,1,2,2,2], 'col2': ['A','B','A','B','C'], 'value': [2,4,6,8,10]})

    col1 col2 value
0   1    A    2
1   1    B    4
2   2    A    6
3   2    B    8
4   2    C    10
我正在寻找一种方法,用现有值在
col1
col2
的可能组合中创建任何缺少的行,并用零填充缺少的行

预期的结果将是:

    col1 col2 value
0   1    A    2
1   1    B    4
2   2    A    6
3   2    B    8
4   2    C    10
5   1    C    0    <- Missing the "1-C" combination, so create it w/ value = 0
col1 col2值
0 1 A 2
1 B 4
2 A 6
3 2 B 8
4 2 C 10

5 1 C 0使用
pivot
,然后使用
stack

df.pivot(*df.columns).fillna(0).stack().to_frame('values').reset_index()
Out[564]: 
   col1 col2  values
0     1    A     2.0
1     1    B     4.0
2     1    C     0.0
3     2    A     6.0
4     2    B     8.0
5     2    C    10.0
您可以使用+:

输出

   col1 col2  value
0     1    A      2
1     1    B      4
2     1    C      0
3     2    A      6
4     2    B      8
5     2    C     10

另一种使用
unstack
的方法是
fill\u value=0
stack
reset\u index

df.set_index(['col1','col2']).unstack(fill_value=0).stack().reset_index()

Out[311]:
   col1 col2  value
0     1    A      2
1     1    B      4
2     1    C      0
3     2    A      6
4     2    B      8
5     2    C     10

希望我能检查多个答案,因为这也非常有效。由于与我正在处理的实际数据相关的一些其他原因,我将上面@Andy的答案标记为解决方案,因为它更容易实现到我正在处理的内容中。尽管如此,还是要感谢这个非常酷的解决方案!
df.set_index(['col1','col2']).unstack(fill_value=0).stack().reset_index()

Out[311]:
   col1 col2  value
0     1    A      2
1     1    B      4
2     1    C      0
3     2    A      6
4     2    B      8
5     2    C     10