2016-12-29 51 views
3

考慮數據框df與LOC分配時,爲什麼我收到楠

df = pd.DataFrame(np.arange(25).reshape(5, 5), list('ABCDE'), list('abcde')) 
print(df) 

    a   b   c   d   e 
A   0   1   2   3   4 
B   5   6   7   8   9 
C  10  11  12  13  14 
D  15  16  17  18  19 
E  20  21  22  23  24 

我想在'E'行對應的值纔會其中'D'行的值是替換'A'行的值等於零國防部3

創建布爾面具

mask = df.loc['D'] % 3 == 0 

然後,我讓我的任務

df.loc['A'] = df.loc['E', mask] 

不過,我現在已經在我的一些列的np.nan,現在我的整個數據幀是float

print(df) 

     a  b  c  d  e 
A 20.0 NaN NaN 23.0 NaN 
B 5.0 6.0 7.0 8.0 9.0 
C 10.0 11.0 12.0 13.0 14.0 
D 15.0 16.0 17.0 18.0 19.0 
E 20.0 21.0 22.0 23.0 24.0 

我應該怎樣去獲得這樣的結果?

a b c d e 
A 20 1 2 23 4 
B 5 6 7 8 9 
C 10 11 12 13 14 
D 15 16 17 18 19 
E 20 21 22 23 24 

回答

3

包括maskloc'A'行,而不是'E'行:

df.loc['A', mask] = df.loc['E'] 

你看到NaN值的原因是你將行'A'的全部重新分配爲行'E'的屏蔽版本。第'E'行的蒙版版本缺少某些列的條目,因此它們被填充爲NaNNaN的dtype是float,它強制所有其他整數值爲浮點數。通過在行'A'上使用mask來代替,您只需指定要更新的位置。

所得輸出:

a b c d e 
A 20 1 2 23 4 
B 5 6 7 8 9 
C 10 11 12 13 14 
D 15 16 17 18 19 
E 20 21 22 23 24 
2

試試這個:

In [172]: df.loc['A', df.columns[df.loc['D'] % 3 == 0]] = df.loc['E'] 

In [173]: df 
Out[173]: 
    a b c d e 
A 20 1 2 23 4 
B 5 6 7 8 9 
C 10 11 12 13 14 
D 15 16 17 18 19 
E 20 21 22 23 24 
相關問題