繁体   English   中英

熊猫旋转和分组?

[英]Pandas pivot and group by?

我正在使用 Pandas 加载 .csv 提取,然后进行一些转换,最终目标是将数据集导出回 .csv。 我有一个结构类似于的数据框:

col1    col2    col3        col4
name1   Yes     string1     val1
name2           string1     val1
name3           string1     val1
name2   Yes     string2     val2
name3           string2     val2
name4           string2     val2
name3   Yes     string3     val3
name4           string3     val3
name5           string3     val3

并希望输出显示如下:

name1   name2   name3   name4   name5   col3        col4
Yes                                     string1     val1
        Yes                             string2     val2
                Yes                     string3     val3

我能够使用.pivot()从原始数据.pivot()获取 col1 和 col2 中的数据以按需要显示,但据我所知,没有办法包含其他具有分组值的列(这里的 col3 和 col4示例)使用.pivot() ,看起来好像.pivot_table()对我的目的不起作用。 我使用.pivot()的剩余问题是,当新索引形成时,我失去了连接回其他分组列的能力(同样,这里是 col3 和 col4)。

我走在正确的道路上吗? 或者有没有更好的方法来接近我想要完成的事情?

提前致谢。

您想使用参数dropna=False来保留只有缺失值的组:

piv = df.pivot_table(index='col3', 
                     columns='col1', 
                     values='col2', 
                     aggfunc=lambda x: x, 
                     dropna=False)


col1    name1 name2 name3 name4 name5
col3                                 
string1   Yes   NaN   NaN   NaN   NaN
string2   NaN   Yes   NaN   NaN   NaN
string3   NaN   NaN   Yes   NaN   NaN

要将NaN转换为空字符串,请使用参数fill_value

piv = df.pivot_table(index='col3', 
                     columns='col1', 
                     values='col2', 
                     aggfunc=lambda x: x, 
                     dropna=False,
                     fill_value='')

col1    name1 name2 name3 name4 name5
col3                                 
string1   Yes                        
string2         Yes                  
string3               Yes   

要删除索引和列属性名称,请使用rename_axis

piv = (df.pivot_table(index='col3', 
                     columns='col1', 
                     values='col2', 
                     aggfunc=lambda x: x, 
                     dropna=False,
                     fill_value='')
       .rename_axis(index=None, columns=None)
      )

        name1 name2 name3 name4 name5
string1   Yes                        
string2         Yes                  
string3               Yes            

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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