熊猫重新排序数据

时间:2016-10-03 06:21:13

标签: python pandas dataframe

使用pivot可能很容易,但由于我没有添加数字(每行都是唯一的),我应该怎么做呢?

输入:

      Col1   Col2 Col3
0    123.0   33.0  ABC
1    345.0   39.0  ABC
2    567.0  100.0  ABC
3    123.0   82.0  PQR
4    345.0   10.0  PQR
5    789.0   38.0  PQR
6    890.0   97.0  XYZ
7    345.0   96.0  XYZ

输出:

      Col1    ABC   PQR   XYZ
0    123.0   33.0  82.0   NaN
1    345.0   39.0  10.0  96.0
2    567.0  100.0   NaN   NaN
3    789.0    NaN  38.0   NaN
4    890.0    NaN   NaN  97.0

我可以用数据帧格式获得此输出然后请?非常感谢您一起来看看!

1 个答案:

答案 0 :(得分:2)

您可以使用pivot

print (df.pivot(index='Col1', columns='Col3', values='Col2'))
Col3     ABC   PQR   XYZ
Col1                    
123.0   33.0  82.0   NaN
345.0   39.0  10.0  96.0
567.0  100.0   NaN   NaN
789.0    NaN  38.0   NaN
890.0    NaN   NaN  97.0

set_indexunstack的另一种解决方案:

print (df.set_index(['Col1','Col3'])['Col2'].unstack())
Col3     ABC   PQR   XYZ
Col1                    
123.0   33.0  82.0   NaN
345.0   39.0  10.0  96.0
567.0  100.0   NaN   NaN
789.0    NaN  38.0   NaN
890.0    NaN   NaN  97.0

通过评论编辑:

需要pivot_table

print (df.pivot_table(index='Col1', columns='Col3', values='Col2'))
Col3     ABC   PQR   XYZ
Col1                    
123.0   33.0  82.0   NaN
345.0   39.0  10.0  96.0
567.0  100.0   NaN   NaN
789.0    NaN  38.0   NaN
890.0    NaN   NaN  97.0

使用groupby的另一个更快的解决方案,聚合mean(默认情况下pivot_table也会聚合mean),DataFrame.squeeze转换为Series,最后unstack

print (df.groupby(['Col1','Col3']).mean().squeeze().unstack())
Col3     ABC   PQR   XYZ
Col1                    
123.0   33.0  82.0   NaN
345.0   39.0  10.0  96.0
567.0  100.0   NaN   NaN
789.0    NaN  38.0   NaN
890.0    NaN   NaN  97.0
相关问题