簡體   English   中英

如何將 ndarray 轉換為“高” Pandas DataFrame

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

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