簡體   English   中英

從熊貓數據框的列創建一個numpy數組

[英]Create a numpy array from columns of a pandas dataframe

我有一個看起來像這樣的DataFrame

A    B    C
1    2    3
1    5    3
4    8    2
4    2    1

我想從此數據創建一個NumPy數組,使用A列作為索引, B列作為列標題, C列作為填充數據。

最終,它應該看起來像這樣:

     2    5    8
1    3    3    
4    1         2

有什么好方法嗎?

我已經嘗試過df.pivot_table ,但是擔心我弄亂了數據,所以我寧願以另一種更直觀的方式進行操作。

像這樣操作數據框

df.set_index(['A', 'B']).C.unstack()

在此處輸入圖片說明

要么

df.set_index(['A', 'B']).C.unstack(fill_value='')

在此處輸入圖片說明


得到這樣的numpy數組

df.set_index(['A', 'B']).C.unstack().values

array([[  3.,   3.,  nan],
       [  1.,  nan,   2.]])

要么

df.set_index(['A', 'B']).C.unstack(fill_value='').values

array([[3, 3, ''],
       [1, '', 2]], dtype=object)

Pandas拆堆看起來不錯! 因此,我認為讓我們嘗試使用NumPy復制相同的行為,該行為可以在數組上工作並最終得到如下結果-

def numpy_unstack(a, fillval=0):
    r = np.unique(a[:,0],return_inverse=1)[1]
    c = np.unique(a[:,1],return_inverse=1)[1]
    out = np.full((r.max()+1,c.max()+1),fillval)
    out[r,c] = a[:,2]
    return out

樣品運行-

In [81]: df
Out[81]: 
   0  1  2
0  1  2  3
1  1  5  3
2  4  8  2
3  4  2  1

In [82]: numpy_unstack(df.values,0)
Out[82]: 
array([[ 3.,  3.,  0.],
       [ 1.,  0.,  2.]])

In [83]: numpy_unstack(df.values,np.nan)
Out[83]: 
array([[  3.,   3.,  nan],
       [  1.,  nan,   2.]])

像上面提到的,你可以像這樣使用pd.pivot_table

In [1655]: df.pivot_table(index='A', columns='B', values='C', fill_value='')
Out[1655]:
B  2  5  8
A
1  3  3
4  1     2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM