目標:將 DataFrame A 的每一行轉換為新的 Dataframe B。這個新的 Dataframe B 應該在每一行中包含一組來自 A 的列。如果有 6 個組,每個 B 中應該有 6 行。問題:我設法做到了上述事情,我只是想知道是否有更蟒蛇的方式來做到這一點?我已經(jīng)嘗試過盡可能簡化,但我仍然覺得有一個更簡單的解決方案。這是我的方法:import pandas as pdimport numpy as npA = pd.DataFrame(np.random.rand(100,3), columns=['A_1','B_1','B_2'])slices = [['A_1','A_2'],['B_1','B_2']]def create_timeseries(data, slices): sliced_cols = [list(data.columns[data.columns.isin(i)]) for i in slices] len_slices = [0] + [len(sliced_cols[i]) for i in range(len(sliced_cols))] len_slices = np.cumsum(len_slices) final_sliced_data = [] for i, rows in enumerate(data.iterrows()): mat = np.zeros((len(sliced_cols), len_slices[-1])) for j, slices in enumerate(sliced_cols): mat[j, len_slices[j]:len_slices[j+1]] = rows[1].loc[slices] final_sliced_data.append(pd.DataFrame(mat, columns=sum(sliced_cols, []))) return final_sliced_dataB = create_timeseries(A, slices)# have a look at first tranformed rowB[0]例子:輸入(100 次觀察):A: A_1 B_1 B_20 0.574628 0.521426 0.1618651 0.137718 0.237061 0.1248902 0.753827 0.032432 0.7855843 0.611985 0.606326 0.5854084 0.676480 0.543213 0.055162.. ... ... ...95 0.383652 0.189211 0.22311096 0.063715 0.312059 0.23320697 0.886396 0.072423 0.10880998 0.853179 0.314846 0.90700699 0.302820 0.402470 0.152462[100 rows x 3 columns]輸出(前 2 次觀察):B[0]: A_1 B_1 B_20 0.574628 0.000000 0.0000001 0.000000 0.521426 0.161865B[1]: A_1 B_1 B_20 0.137718 0.000000 0.000001 0.000000 0.237061 0.12489
2 回答
Cats萌萌
TA貢獻1805條經(jīng)驗 獲得超9個贊
嘗試這個:
B = A.apply(lambda x: pd.DataFrame([[x.A_1,0,0],[0, x.B_1, x.B_2]], columns=A.columns), axis=1).tolist()
犯罪嫌疑人X
TA貢獻2080條經(jīng)驗 獲得超4個贊
替代解決方案:
B = pd.DataFrame(data=np.repeat(A.values, 2, axis=0), columns=A.columns)
B.loc[1::2, 'A_1'] = 0
B.loc[::2 ,['B_1', 'B_2']] = 0
B = [B.iloc[i:i+2, :] for i in range(0, len(B), 2)]
添加回答
舉報
0/150
提交
取消
