我正在嘗試將寬資料幀 [2r, 12c] 轉換為長資料幀 [4r,6c)。
From this ...
0 1 2 3 4 5 6 7 8 9 10 11
0 1.0 0.9 0.8 0.5 0.4 0.3 0.7 0.9 0.2 0.1 0.4 0.3
1 0.6 0.8 0.5 0.3 0.7 0.1 0.4 0.2 0.8 0.6 0.4 0.1
... to this ...
0 1 2 3 4 5
0 1.0 0.9 0.8 0.5 0.4 0.3
1 0.7 0.9 0.2 0.1 0.4 0.3
2 0.6 0.8 0.5 0.3 0.7 0.1
3 0.4 0.2 0.8 0.6 0.4 0.1
我的代碼產生了意想不到的結果:
0 1 2 3 4 5 6 7 8 9 10 11
0 1.0 0.9 0.8 0.5 0.4 0.3
1 Nan Nan Nan Nan Nan Nan 0.7 0.9 0.2 0.1 0.4 0.3
etc...
我的代碼:
import pandas as pd
import numpy as np
df = pd.DataFrame(
np.random.randn(2, 12)
)
slice_sz = 6
x = df.columns
col_num = len(x)
col_iter = int(col_num / slice_sz)
y = df.index
row_num = len(y)
df_list = pd.DataFrame([])
for row in range(row_num):
# print('Processing row', row)
i = 0
j = slice_sz - 1
for col in range(col_iter):
df_sliced = df.iloc[row, i:j]
df_sliced = df_sliced.to_frame()
df_sliced = df_sliced.transpose()
df_list = df_list.append(df_sliced)
df_sliced = []
i = slice_sz
j = slice_sz
我知道必須有一種更優雅的方式來做到這一點。謝謝你的幫助,
uj5u.com熱心網友回復:
如果你不關心熊貓,我會做這樣的事情:
import numpy as np
data = np.random.randn(2, 12)
# reshape is your friend!
data_transformed = data.reshape(4,6)
請numpy.reshape在此處查看檔案:https : //numpy.org/doc/stable/reference/generated/numpy.reshape.html
雖然如果你真的,真的,真的想重塑一個資料框(雖然我不確定你為什么想要),你可以這樣做:
import pandas as pd
import numpy as np
df = pd.DataFrame(
np.random.randn(2, 12)
)
df = pd.DataFrame(df.to_numpy().reshape(4,6))
我在那里所做的就是將資料幀轉換為一個 numpy 陣列,重塑,并將 numpy 陣列設定回一個資料幀。
uj5u.com熱心網友回復:
對于上面的代碼,我會使用 df_list.pivot()
在 中,.pivot()您需要指定index = '',columns = ''和values = ''。.pivot()如果您需要任何進一步的說明,這里有很多資訊。
此函式將有助于對資料幀進行寬到長或長到寬的轉置。
這應該消除您為執行此任務而放在一起的 for 回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353840.html
