Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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_Python 3.x_Pandas - Fatal编程技术网

如何在python中使用值的组合?

如何在python中使用值的组合?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有以下pandasdataframes: import pandas as pd import numpy as np df = pd.DataFrame({'par': ['par_scl', 'par_scl', 'par_scl', 'par_loc','par_pot'], 'var': ['all', 'all', 'all', 'all','var1'], 'terc':

我有以下
pandas
dataframes:

   import pandas as pd
   import numpy as np
   df = pd.DataFrame({'par': ['par_scl', 'par_scl', 'par_scl', 'par_loc','par_pot'],
                       'var': ['all', 'all', 'all', 'all','var1'],
                       'terc': [1, 2, 3, np.nan,np.nan],
                       'value': [1,2,3,4,5]})

       par   var  terc  value
0  par_scl   all   1.0      1
1  par_scl   all   2.0      2
2  par_scl   all   3.0      3
3  par_loc   all   NaN      4
4  par_pot  var1   NaN      5

    vars_df = pd.DataFrame({'var': ['var1', 'var2']})

    var
0  var1
1  var2
我想以

final_df = pd.DataFrame({'par':['par_scl','par_scl','par_scl','par_scl','par_scl','par_scl','par_loc','par_loc','par_pot'],
                             'var':['var1','var2','var1','var2','var1','var2','var1','var2','var1'],
                             'terc':[1,1,2,2,3,3,np.nan,np.nan,np.nan],
                             'value':[1,1,2,2,3,3,4,4,5]})

        par   var  terc  value
0  par_scl  var1   1.0      1
1  par_scl  var2   1.0      1
2  par_scl  var1   2.0      2
3  par_scl  var2   2.0      2
4  par_scl  var1   3.0      3
5  par_scl  var2   3.0      3
6  par_loc  var1   NaN      4
7  par_loc  var2   NaN      4
8  par_pot  var1   NaN      5
换句话说:如果
var
all
,那么我希望对每个
par
进行
var
terc
的组合,否则只需要外部合并


有没有一种有效的方法可以做到这一点?

一种解决方案是通过筛选行创建交叉连接,删除辅助列,并添加没有
所有
值的行:

df1 = df[df['var'] == 'all'].assign(a=1).merge(vars_df.assign(a=1), on='a', suffixes=('_',''))

df2 = (df1.drop(['var_','a'], axis=1)
          .append(df[df['var'] != 'all'], sort=False, ignore_index=True))
print (df2)
       par  terc  value   var
0  par_scl   1.0      1  var1
1  par_scl   1.0      1  var2
2  par_scl   2.0      2  var1
3  par_scl   2.0      2  var2
4  par_scl   3.0      3  var1
5  par_scl   3.0      3  var2
6  par_loc   NaN      4  var1
7  par_loc   NaN      4  var2
8  par_pot   NaN      5  var1