繁体   English   中英

将熊猫数据帧转换为不同的格式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM