2017-10-02 3 views
1

한 열에 NaN과 일부 값이 있고 다른 열도 NaN과 일부 값을 갖습니다. 두 열 모두 값을 가질 수는 없지만 두 열 모두 NaN을 가질 수 있습니다. 열을 병합 할 수있는 방법이 있습니까? 하나의 열을 선택하려고 시도했는데 포럼la가있는 df.fillna이 작동하지 않습니다.팬더의 NaN을 포함하는 인접한 열을 병합

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 
+0

가능한 복제 https://stackoverflow.com/questions/39790183/fill -missing-values-of-one-column-from-another-column-in-pandas) –

답변

2

combine_firstfillna은 일반적으로 좋은 대안 얻을

df['new'] = df['new_x'].combine_first(df['new_y']) 

또는 단순히

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

combine_first하지만, 이러한을 사용할 수 있습니다 귀하의 NaN이 독점적이기 때문에 외면 전구가 작동합니다.

옵션 1
df.max

s = quad_data.max(1) 
print(s) 
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 
dtype: float64 

옵션 df.sum

s = quad_data.sum(1) 
print(s) 
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 
dtype: float64 


quad_data['new'] = s 
+1

그건 대단해! – Vaishali

+0

오우 워, 정말 멋지다. – JamAndJammies

1

당신은 당신은

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 
2

이 시도 .. LOL

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 
([팬더의 다른 열에서 하나 개의 칼럼의 값을 기입 누락]의
+1

첫 번째 축을 따라 bfill? 아주 발명! –

+0

@ cᴏʟᴅs side 측면 상자를 생각하기가 어렵습니다. – Wen

+0

@Wen, 이것이 가장 관용적이며 일반적인 솔루션이라고 생각합니다. ++ – MaxU