[英]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.