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