使用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
我可以用数据帧格式获得此输出然后请?非常感谢您一起来看看!
答案 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
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