python - 将熊猫数据框转换为不同的格式
问题描述
我有一个这样的数据框
col1 col2 col3 col4
id Category
a blue 4 1 3 0
red 1 0 0 4
b red 0 1 8 5
可以使用以下代码制作
df = pd.DataFrame({ 'id': ['a','a','b'],'Category': ['red','blue','red'], 'col1': [1,4,0], 'col2': [0,1,1],'col3' : [0,3,8], 'col4': [4,0,5]})
sum_df = df.groupby(['id','Category']).agg({'col1': 'sum', 'col2': 'sum','col3': 'sum', 'col4': 'sum'})
我希望输出看起来像这样
id red_col1 red_col2 red_col3 red_col4 blue_col1 blue_col2 blue_col3 blue_col4
0 a 1 0 0 4 4.0 1.0 3.0 0.0
1 b 0 1 8 5 NaN NaN NaN NaN
我希望每id
行都是唯一的,并且值汇总到相应的列中。数据集中有 1000 个 id 和 1000 个类别。如果一列没有与之关联的值,那么它应该是空白的,即None
。
解决方案
使用DataFrame.unstack
然后重命名列:
new_df = df.unstack('Category')
new_df.columns = [f'{color}_{col}' for col, color in new_df.columns]
new_df=new_df.sort_index(axis=1).reset_index()
print(new_df)
id blue_col1 blue_col2 blue_col3 blue_col4 red_col1 red_col2 \
0 a 4.0 1.0 3.0 0.0 1.0 0.0
1 b NaN NaN NaN NaN 0.0 1.0
red_col3 red_col4
0 0.0 4.0
1 8.0 5.0
推荐阅读
- java - Android片段没有膨胀
- mysql - 多个表上的多个排序字段,无需连接 sql
- reactjs - 尝试使用样式组件时出现 Webpack 错误
- php - 仅当购物车中的每个产品都属于同一类别时才分配 var
- javafx - 如何刷新 JavaFX 中的选择框?
- javascript - 与 Map 一起使用后,Array 过滤器函数的行为发生了变化
- java - 移动应用程序仿真能够连接到在线应用程序服务,但不能在实际设备上运行
- angular - Angular获取选定的让值
- python - 在本地同步 aws s3 存储桶(连同文件夹结构)并仅在新添加的本地文件夹上运行 python 代码
- bootstrap-4 - 外部输入时隐藏的简单表单和引导错误?