Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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 合并熊猫中包含NaN的相邻列_Python_Pandas_Dataframe_Nan - Fatal编程技术网

Python 合并熊猫中包含NaN的相邻列

Python 合并熊猫中包含NaN的相邻列,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,一列有NaN和一些值,其他列也有NaN和一些值。不可能两列都有值,但两列都可能有NaN。有没有办法把这些列合并在一起? 我试过选择一个列,然后用forumla选择df.fillna,但这不起作用 quad_data['new'] = quad_data.apply(lambda x: function(x.a, x.b, const_a, const_b), axis=1) df1 = pd.merge(df1, quad_data[['a','b','new']], left_on=['a',

一列有NaN和一些值,其他列也有NaN和一些值。不可能两列都有值,但两列都可能有NaN。有没有办法把这些列合并在一起? 我试过选择一个列,然后用forumla选择df.fillna,但这不起作用

quad_data['new'] = quad_data.apply(lambda x: function(x.a, x.b, const_a, const_b), axis=1)
df1 = pd.merge(df1, quad_data[['a','b','new']], left_on=['a','b'], right_on = ['a','b'], how='inner')


    new_x       new_y
0   NaN         0.997652
1   NaN         0.861592
2   0           NaN
3   0.997652    NaN
4   0.861592    NaN
5   2.673742    NaN
6   2.618845    NaN
7   NaN         0.432525
8   NaN         NaN
9   0.582576    NaN
10  0.50845     NaN
11  NaN         0.341510
12  NaN         0.351510
13  1.404787    NaN
14  2.410116    NaN
15  0.540265    NaN
16  NaN         1.404787
17  NaN         2.410116
18  NaN         0.540265
19  NaN         1.403903
20  1.448987    NaN

您可以先使用combine_

df['new'] = df['new_x'].combine_first(df['new_y'])
或者干脆

df['new'] = df['new_x'].fillna(df['new_y'])
你得到

    new_x       new_y       new
0   NaN         0.997652    0.997652
1   NaN         0.861592    0.861592
2   0.000000    NaN         0.000000
3   0.997652    NaN         0.997652
4   0.861592    NaN         0.861592
5   2.673742    NaN         2.673742
6   2.618845    NaN         2.618845
7   NaN         0.432525    0.432525
8   NaN         NaN         NaN
9   0.582576    NaN         0.582576
10  0.508450    NaN         0.508450
11  NaN         0.341510    0.341510
12  NaN         0.351510    0.351510
13  1.404787    NaN         1.404787
14  2.410116    NaN         2.410116
15  0.540265    NaN         0.540265
16  NaN         1.404787    1.404787
17  NaN         2.410116    2.410116
18  NaN         0.540265    0.540265
19  NaN         1.403903    1.403903
20  1.448987    NaN         1.448987

您可以先使用combine_

df['new'] = df['new_x'].combine_first(df['new_y'])
或者干脆

df['new'] = df['new_x'].fillna(df['new_y'])
你得到

    new_x       new_y       new
0   NaN         0.997652    0.997652
1   NaN         0.861592    0.861592
2   0.000000    NaN         0.000000
3   0.997652    NaN         0.997652
4   0.861592    NaN         0.861592
5   2.673742    NaN         2.673742
6   2.618845    NaN         2.618845
7   NaN         0.432525    0.432525
8   NaN         NaN         NaN
9   0.582576    NaN         0.582576
10  0.508450    NaN         0.508450
11  NaN         0.341510    0.341510
12  NaN         0.351510    0.351510
13  1.404787    NaN         1.404787
14  2.410116    NaN         2.410116
15  0.540265    NaN         0.540265
16  NaN         1.404787    1.404787
17  NaN         2.410116    2.410116
18  NaN         0.540265    0.540265
19  NaN         1.403903    1.403903
20  1.448987    NaN         1.448987
combine_first和fillna通常都是不错的选择,但这些选择很有效,因为您的NAN是排他性的

选择1 df.max

选择2 总和

combine_first和fillna通常都是不错的选择,但这些选择很有效,因为您的NAN是排他性的

选择1 df.max

选择2 总和

试试这个。。哈哈

df.bfill(1)['new_x']
Out[45]: 
0     0.997652
1     0.861592
2     0.000000
3     0.997652
4     0.861592
5     2.673742
6     2.618845
7     0.432525
8          NaN
9     0.582576
10    0.508450
11    0.341510
12    0.351510
13    1.404787
14    2.410116
15    0.540265
16    1.404787
17    2.410116
18    0.540265
19    1.403903
20    1.448987
Name: new_x, dtype: float64
试试这个。。哈哈

df.bfill(1)['new_x']
Out[45]: 
0     0.997652
1     0.861592
2     0.000000
3     0.997652
4     0.861592
5     2.673742
6     2.618845
7     0.432525
8          NaN
9     0.582576
10    0.508450
11    0.341510
12    0.351510
13    1.404787
14    2.410116
15    0.540265
16    1.404787
17    2.410116
18    0.540265
19    1.403903
20    1.448987
Name: new_x, dtype: float64

太棒了!太棒了!B沿着第一个轴旋转?很有创意@Cᴏʟᴅsᴘᴇᴇᴅ 很难从你的男人盒子里想出来:@Wen,我认为这是最惯用和通用的解决方案++B沿着第一个轴旋转?很有创意@Cᴏʟᴅsᴘᴇᴇᴅ 很难从你的男人盒子里想出来:@Wen,我认为这是最惯用和通用的解决方案++可能的重复可能的重复