[英]Transform pandas dataframe into different format
我有一个这样的数据框
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
国际大学联盟
s=df.unstack().sort_index(level=1,axis=1)
s.columns=s.columns.map('{0[1]}_{0[0]}'.format)
s
Out[136]:
blue_col1 blue_col2 blue_col3 ... red_col2 red_col3 red_col4
id ...
a 4.0 1.0 3.0 ... 0.0 0.0 4.0
b NaN NaN NaN ... 1.0 8.0 5.0
[2 rows x 8 columns]
使用
df = df.unstack()
然后你可以添加前缀
df = df.add_prefix(category'_')
这将解决
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.