Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 改变数据帧的结构_Python_Pandas - Fatal编程技术网

Python 改变数据帧的结构

Python 改变数据帧的结构,python,pandas,Python,Pandas,是否有可以在以下数据帧之间交换的函数(df1,df2): 数据帧df1: #df1 num type values 0 1 a 18 1 2 a 26 2 3 a 34 3 4 a 21 4 5 a 48 5 1 b 1 6 2 b 19 7 3 b 36 8 4 b 42 9

是否有可以在以下数据帧之间交换的函数(
df1
df2
):

数据帧df1:

   #df1
   num type  values
0    1    a      18
1    2    a      26
2    3    a      34
3    4    a      21
4    5    a      48
5    1    b       1
6    2    b      19
7    3    b      36
8    4    b      42
9    5    b      30
数据帧df2:

    a   b  num
0  18   1    1
1  26  19    2
2  34  36    3
3  21  42    4
4  48  30    5
我取第一个
df
,type列成为带有变量的类型名。是否有一个函数可以做到这一点(从
df1
df2
)和vice verca动作(从
df2
df1

您可以使用和:

    a   b  num
0  18   1    1
1  26  19    2
2  34  36    3
3  21  42    4
4  48  30    5
print df
   num type  values
0    1    a      20
1    2    a      25
2    3    a       2
3    4    a      27
4    5    a      29
5    1    b      39
6    2    b      40
7    3    b       6
8    4    b      17
9    5    b      47
print df2
    a   b  num
0  20  39    1
1  25  40    2
2   2   6    3
3  27  17    4
4  29  47    5
df1 = df2.set_index('num').stack().reset_index()
df1.columns = ['num','type','values']
df1 = df1.sort_values('type')
print df1
   num type  values
0    1    a      20
2    2    a      46
4    3    a      21
6    4    a      33
8    5    a      10
1    1    b      45
3    2    b      39
5    3    b      38
7    4    b      37
9    5    b      34

df3 = df.pivot(index='num', columns='type', values='values').reset_index()
df3.columns.name = None
df3 = df3[['a','b','num']]
print df3
    a   b  num
0  46  23    1
1  38   6    2
2  36  47    3
3  33  34    4
4  15   1    5