Python 用数据框中的一些默认值填充每个列组合的值
我有一个这样的数据框Python 用数据框中的一些默认值填充每个列组合的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个这样的数据框 df col1 col2 col3 1907 CD 49 1907 FR 33 1907 SA 34 1908 PR 1 1908 SA 37 1909 PR 16 1909 SA 38 现在CD与col1 1908和1909值不存在,FR与1908和1909值不存在,PR与1907值不存在 现在,我想创建具有col2值的行,而不是所
df
col1 col2 col3
1907 CD 49
1907 FR 33
1907 SA 34
1908 PR 1
1908 SA 37
1909 PR 16
1909 SA 38
现在CD与col1 1908和1909值不存在,FR与1908和1909值不存在,PR与1907值不存在
现在,我想创建具有col2值的行,而不是所有具有col3值为0的col1值的行
所以最终的数据帧看起来像
df
col1 col2 col3
1907 CD 49
1907 FR 33
1907 SA 34
1907 PR 0
1908 CD 0
1908 FR 0
1908 PR 1
1908 SA 37
1908 CD 0
1908 FR 0
1909 PR 16
1909 SA 38
我可以使用for循环对每个可能的col2值执行此操作,并与每个col1组进行比较。但我正在寻找最有效的快捷方式。对于由0
填充的所有组合使用with:
df = df.set_index(['col1','col2']).unstack(fill_value=0).stack().reset_index()
print (df)
col1 col2 col3
0 1907 CD 49
1 1907 FR 33
2 1907 PR 0
3 1907 SA 34
4 1908 CD 0
5 1908 FR 0
6 1908 PR 1
7 1908 SA 37
8 1909 CD 0
9 1909 FR 0
10 1909 PR 16
11 1909 SA 38
另一个想法是使用:
我们还可以:
或
输出
col1 col2 col3
0 1907 CD 49.0
1 1907 FR 33.0
2 1907 PR 0.0
3 1907 SA 34.0
4 1908 CD 0.0
5 1908 FR 0.0
6 1908 PR 1.0
7 1908 SA 37.0
8 1909 CD 0.0
9 1909 FR 0.0
10 1909 PR 16.0
11 1909 SA 38.0
你确定你的结果是正确的吗?最后4排应该是1909年吧
df.pivot(*df).stack(dropna = False).fillna(0).rename('col3').reset_index()
df.pivot_table(*df.iloc[:,::-1],fill_value = 0).unstack().rename('col3').reset_index()
col1 col2 col3
0 1907 CD 49.0
1 1907 FR 33.0
2 1907 PR 0.0
3 1907 SA 34.0
4 1908 CD 0.0
5 1908 FR 0.0
6 1908 PR 1.0
7 1908 SA 37.0
8 1909 CD 0.0
9 1909 FR 0.0
10 1909 PR 16.0
11 1909 SA 38.0