展平并展开csv文件?

Ken*_*ous 2 python csv flatten pandas

目的:

我想转换以下架构:

group, id, name
A, 12345, "eeny"
A, 23456, "meeny"
A, 34567, "miney mo"
B, 99999, "foo"
B, 88888, "bar"
B, 77777, "foobar"
Run Code Online (Sandbox Code Playgroud)

成:

group, id1, name1, id2, name2, id3, name3
A, 12345, "eeny", 23456, "meeny", 34567, "miney mo"
B, 99999, "foo", 88888, "bar", 77777, "foobar" 
Run Code Online (Sandbox Code Playgroud)

在Python的上下文中,我假设可以使用Pandas groupby()和/或unstack()来完成,但我遇到的大多数文档都涉及数值计算而不是字符串.

任何帮助将不胜感激.谢谢!

chr*_*isb 5

这是一种方式.在每个组中添加一个表示计数的列.

df['group_num'] = df.groupby('group')['id'].transform(lambda x: range(1, len(x)+1))
Run Code Online (Sandbox Code Playgroud)

然后,使用该pivot函数重塑数据.

In [37]: df.pivot(index='group', columns='group_num')
Out[37]: 
              id                name                 
group_num      1      2      3     1      2         3
group                                                
A          12345  23456  34567  eeny  meeny  miney mo
B          99999  88888  77777   foo    bar    foobar
Run Code Online (Sandbox Code Playgroud)

这会将列设置为MultiIndex.当你在你想要的输出中显示时,你可以扁平化,如下所示:

In [41]: df = df.pivot(index='group', columns='group_num')    

In [42]: df.columns = [''.join([lvl1, str(lvl2)]) for lvl1, lvl2 in df.columns]

In [43]: df
Out[43]: 
         id1    id2    id3 name1  name2     name3
group                                            
A      12345  23456  34567  eeny  meeny  miney mo
B      99999  88888  77777   foo    bar    foobar
Run Code Online (Sandbox Code Playgroud)