Python 熊猫:使用零值创建缺少的组合行
假设我有一个数据帧df: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 = 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