目标:将 DataFrame A 的每一行转换为新的 Dataframe B。这个新的 Dataframe B 应该在每一行中包含一组来自 A 的列。如果有 6 个组,每个 B 中应该有 6 行。问题:我设法做到了上述事情,我只是想知道是否有更蟒蛇的方式来做到这一点?我已经尝试过尽可能简化,但我仍然觉得有一个更简单的解决方案。这是我的方法: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条经验 获得超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条经验 获得超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
提交
取消