Python 合并熊猫中包含NaN的相邻列
一列有NaN和一些值,其他列也有NaN和一些值。不可能两列都有值,但两列都可能有NaN。有没有办法把这些列合并在一起? 我试过选择一个列,然后用forumla选择df.fillna,但这不起作用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',
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,我认为这是最惯用和通用的解决方案++可能的重复可能的重复