假设我的数据如下所示:
@H_404_4@df = pd.DataFrame({'color': ['red', 'blue', 'green', 'red', 'blue', 'blue'], 'line': ['sunday', 'sunday', 'monday', 'monday', 'monday', 'tuesday'],
'group': ['1', '1', '2', '1', '1', '1'], 'value': ['a', 'b', 'a', 'c', 'a', 'b']})
color group line value
0 red 1 sunday a
1 blue 1 sunday b
2 green 2 monday a
3 red 1 monday c
4 blue 1 monday a
5 blue 1 tuesday b
基本上,我想要的是获得每种颜色的行列表.例如,我希望颜色为红色,以在其自己的列中显示与其关联的每一行和值.诀窍是我还想显示与同一组颜色相关的其他线条.这些的相应值将是“不符合条件”.因此我希望我的输出看起来像这样:
@H_404_4@ color line_1 line_1_value line_2 line_2_value line_3 line_3_value
0 red sunday a monday c tuesday not eligible
1 blue sunday b monday a tuesday b
2 green monday c
我需要做大约50,000种独特的“颜色”.我确信这是相对简单的事情,但我还没有掌握所需的知识或技能.任何帮助,将不胜感激!
解决方法:
@H_404_4@df = df.drop('group', axis=1)
df['index_by_color'] = df.groupby('color').cumcount()
color line value index_by_color
0 red sunday a 0
1 blue sunday b 0
2 green monday a 0
3 red monday c 1
4 blue monday a 1
5 blue tuesday b 2
使用pivot_table
获取所需数据的方向:
df.pivot_table(index='color', columns=['index_by_color'], aggfunc=lambda x:x.iloc[0])
line value
index_by_color 0 1 2 0 1 2
color
blue sunday monday tuesday b a b
green monday None None a None None
red sunday monday None a c None
关于aggfunc = lambda x:x.iloc [0]的事情是将非数字轮转数据减少为特定值,并且子帧的第一个元素足够根据数据结构的单一性.
对列分层索引重新排序:
@H_404_4@ res = res.sort_index(axis=1, level=1)
line value line value line value
index_by_color 0 0 1 1 2 2
color
blue sunday b monday a tuesday b
green monday a None None None None
red sunday a monday c None None
其余的部分是微不足道的清理,具体取决于你需要的确切的表示,如cumcount()1,如果你需要开始编号为1而不是0,写入/展平列名称,你想要res.columns = [‘_’.join ([l0,str(l1)])对于l0,在res.columns中为l1]或等价物等.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。