pivot\转换python中的一些列并将其保存到datafram

2024-10-01 11:41:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手。我有下面的数据帧。我想透视\转置一些列,并基于列2将数据帧保存到单独的数据帧中。在

data={'col1':[1,101,201,301,2,102,202,302,3,103,203,303], 
                    'col2':[1,1,1,1,2,2,2,2,3,3,3,3],
                    'col3':["2015-01-15","2015-01-15","2015-01-15","2015-01-15","2015-01-15",
                                "2015-01-15","2015-01-15","2015-01-15","2015-01-15","2015-01-15","2015-01-15","2015-01-15"],
                    'col4':["2015-01-15","2015-01-16","2015-01-17","2015-01-18","2015-01-15","2015-01-16",
                                "2015-01-17","2015-01-18","2015-01-15","2015-01-16","2015-01-17",
                                "2015-01-18"], 
                    'col5':[0,1,2,3,0,1,2,3,0,1,2,3],
                    'col6':[273.2,275.9,343,235,273.2,275.9,343,235,273.2,275.9,343,235],
                    'col7':[2.8,3.2,7.9,7.2,2.8,3.2,7.9,7.2,2.8,3.2,7.9,7.2]}
df= pd.DataFrame(data)
print(df)

    col1  col2        col3        col4  col5   col6  col7
0      1     1  2015-01-15  2015-01-15     0  273.2   2.8
1    101     1  2015-01-15  2015-01-16     1  275.9   3.2
2    201     1  2015-01-15  2015-01-17     2  343.0   7.9
3    301     1  2015-01-15  2015-01-18     3  235.0   7.2
4      2     2  2015-01-15  2015-01-15     0  273.2   2.8
5    102     2  2015-01-15  2015-01-16     1  275.9   3.2
6    202     2  2015-01-15  2015-01-17     2  343.0   7.9
7    302     2  2015-01-15  2015-01-18     3  235.0   7.2
8      3     3  2015-01-15  2015-01-15     0  273.2   2.8
9    103     3  2015-01-15  2015-01-16     1  275.9   3.2
10   203     3  2015-01-15  2015-01-17     2  343.0   7.9
11   303     3  2015-01-15  2015-01-18     3  235.0   7.2

所以,我想把上面的数据帧分解成下面的格式。基于column2 name保存了数据帧名称。例如,col2=1,所以dataframe名称df[1],col=2:df[2]

^{pr2}$

Tags: 数据名称dataframedfdatacol2col3col1
1条回答
网友
1楼 · 发布于 2024-10-01 11:41:29

IIUC,我想你想要这样的东西。但是,我不太理解你在结果中的列命名。在

df_out = df.rename_axis('colnum',1).set_index(['col1','col2','col3','col4','col5'])\
           .stack()\
           .groupby(['col1','col5','colnum','col2','col3'])\
           .apply(lambda x: pd.Series(x.values.tolist())).unstack([0,1,2])\
           .reset_index(level=-1, drop=True)

df_out.columns = df_out.columns.map('{0[0]}_{0[1]}_{0[2]}'.format)

打印df[1],其中col2=1

^{pr2}$

输出:

   col2        col3  1_0_col6  1_0_col7  101_1_col6  101_1_col7  201_2_col6  201_2_col7  301_3_col6  301_3_col7
0     1  2015-01-15     273.2       2.8       275.9         3.2       343.0         7.9       235.0         7.2

打印df[2],其中col2=2

df_out.loc[[2]].dropna(1).reset_index()

输出:

   col2        col3  2_0_col6  2_0_col7  102_1_col6  102_1_col7  202_2_col6  202_2_col7  302_3_col6  302_3_col7
0     2  2015-01-15     273.2       2.8       275.9         3.2       343.0         7.9       235.0         7.2

打印df[2],其中col2=3

df_out.loc[[3]].dropna(1).reset_index()

输出:

   col2        col3  3_0_col6  3_0_col7  103_1_col6  103_1_col7  203_2_col6  203_2_col7  303_3_col6  303_3_col7
0     3  2015-01-15     273.2       2.8       275.9         3.2       343.0         7.9       235.0         7.2

相关问题 更多 >