[英]How to convert an ndarray to a “tall” Pandas DataFrame
我正在做的一些工作會產生不同尺寸的 output 張量(numpy ndarray),具體取決於我感興趣/想要 plot 隨着時間的推移,有時我可能會選擇年齡組和性別作為我的目標,這將導致 Z72FA6E1B78A9D4028953E60564A2AA4CZ我們擁有的張量
age_groups[
genders[
days[Value, ..., Value],
days[Value, ..., Value]
],
...,
genders[
days[Value, ..., Value]
days[Value, ..., Value]
],
]
我的問題是,我怎樣才能最有效地將其變成如下所示的 dataframe:
Age_Group Gender Day Value
0 1 M 1 blah
1 1 F 1 blah
2 1 M 2 blah
4 1 F 2 blah
5 1 M 3 blah
6 1 F 3 blah
7 1 M 4 blah
...
n 5 F 21 blah
如果我添加另一個目標來分組,我如何確保它可以推廣到,比如頭發顏色,以便將另一列添加到生成的 df 中?
對不起,如果這個問題有點抽象,我希望我能清楚地說明我的問題,如果不是,我可以嘗試進一步澄清。
您可以從陣列的扁平化版本創建 MultiIndex dataframe。 對於 3D 數組的每個索引處的變量的值沒有真正的指示,但假設是任意順序:
arr = np.arange(4*2*21).reshape(4, 2, 21) # example array
ix = pd.MultiIndex.from_product(
[[1, 2, 3, 4], ['M', 'F'], np.arange(1, 22)],
names=['Age_Group', 'Gender', 'Day']
)
df = pd.DataFrame(arr.flatten(), index=ix, columns=['Value'])
Output:
Age_Group Gender Day Value
0 1 M 1 0
1 1 M 2 1
2 1 M 3 2
3 1 M 4 3
4 1 M 5 4
.. ... ... ... ...
163 4 F 17 163
164 4 F 18 164
165 4 F 19 165
166 4 F 20 166
167 4 F 21 167
如果每個索引處變量值的順序不同,只需更改 function from_product
的輸入以匹配您的數組。
假設您的數組稱為數據:
data = ...
array = np.hstack([np.arange(data.size).reshape(-1, 1) % np.prod(data.shape[i:]) // np.prod(data.shape[i+1:]) for i in range(data.ndim)])
array = np.concatenate([array, data.reshape(-1, 1)])
df = pd.DataFrame(array, columns=['column names'])
現在,如果需要,您只需要將性別列轉換為字母
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.