例如,创建3个DataFrame
并将其连接起来:
df1 = pd.DataFrame({'1':np.random.rand(10),
'2':np.random.rand(10),
'3':np.random.rand(10),
'4':np.random.rand(10)}).assign(Location = 'A')
df2 = pd.DataFrame({'1':np.random.rand(10),
'2':np.random.rand(10),
'3':np.random.rand(10),
'4':np.random.rand(10)}).assign(Location = 'B')
df3 = pd.DataFrame({'1':np.random.rand(10),
'2':np.random.rand(10),
'3':np.random.rand(10),
'4':np.random.rand(10)}).assign(Location = 'C')
cdf = pd.concat([df1, df2, df3])
它给我们:
我尝试用列[1, 2, 3, 4]
交换Location的元素,即[A, B, C]
,结果应该是:
A B C original_axis
0 0.088333 0.009939 0.117679 1
1 0.340463 0.537707 0.261598 1
2 0.243001 0.497268 0.098827 1
3 0.514245 0.133166 0.435097 1
4 0.715491 0.597498 0.635434 1
5 0.578538 0.017931 0.255325 1
6 0.854928 0.485360 0.954285 1
7 0.460750 0.959085 0.657368 1
8 0.573592 0.990451 0.605646 1
9 0.086094 0.206977 0.801752 1
0 0.549036 0.370826 0.387348 2
1 0.323326 0.891108 0.546695 2
2 0.695849 0.329717 0.089323 2
3 0.815171 0.125956 0.973977 2
4 0.123839 0.093963 0.094081 2
5 0.679839 0.093035 0.378317 2
6 0.144703 0.467749 0.146022 2
7 0.011454 0.226450 0.833976 2
8 0.527904 0.848700 0.457423 2
9 0.492924 0.027877 0.608478 2
0 0.723353 0.225212 0.411559 3
1 0.271650 0.042965 0.102511 3
2 0.089035 0.443239 0.222270 3
3 0.848120 0.325830 0.025566 3
4 0.991819 0.820941 0.824764 3
5 0.458587 0.998833 0.519268 3
6 0.615102 0.518176 0.878235 3
7 0.459854 0.920891 0.295850 3
8 0.913309 0.023715 0.871933 3
9 0.847045 0.635648 0.976897 3
0 0.017517 0.744492 0.626891 4
1 0.217091 0.480721 0.488773 4
2 0.261332 0.727520 0.851186 4
3 0.636652 0.198315 0.274114 4
4 0.674848 0.121301 0.979112 4
5 0.179912 0.923860 0.626627 4
6 0.838932 0.708422 0.007303 4
7 0.960088 0.221822 0.717819 4
8 0.388269 0.451810 0.379369 4
9 0.639050 0.323490 0.078356 4
为此,我使用mdf = pd.melt(cdf, id_vars='Location', var_name='time')
将其融化
Location time value
0 A 1 0.046463
1 A 1 0.282879
2 A 1 0.570865
3 A 1 0.719256
4 A 1 0.771334
.. ... ... ...
115 C 4 0.189733
116 C 4 0.244067
117 C 4 0.763828
118 C 4 0.268741
119 C 4 0.586709
并使用mdf.pivot(index = None, columns = 'Location', values = 'value')
,但得到:
Location A B C
0 0.046463 NaN NaN
1 0.282879 NaN NaN
2 0.570865 NaN NaN
3 0.719256 NaN NaN
4 0.771334 NaN NaN
.. ... .. ...
115 NaN NaN 0.189733
116 NaN NaN 0.244067
117 NaN NaN 0.763828
118 NaN NaN 0.268741
119 NaN NaN 0.586709
然后,我使用mdf.pivot_table(columns = 'Location', values = 'value', index = None)
,但得到:
Location A B C
value 0.497467 0.421472 0.474544
我不知道该怎么改正。
如何执行上述交换?
2条答案
按热度按时间rjzwgtxy1#
由于数据是随机的,所以输出可能会不同--尽管解决方案应该是适用的。其思想是long到wide和back到long的组合a-如果由于重复而遇到
index error
,则可以添加一个带有groupby的唯一计数器:kknvjkwl2#
如果可能,使用计数器,通过原始DataFrame
cdf
中的索引值将ignore_index=False
添加到melt
,转换为index
并添加到旋转到index
参数,最后将MultiIndex
的第一级转换为列并添加一些数据清理:或者: