Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用数据框中的一些默认值填充每个列组合的值_Python_Pandas_Dataframe - Fatal编程技术网

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