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()来完成,但我遇到的大多数文档都涉及数值计算而不是字符串.
任何帮助将不胜感激.谢谢!
这是一种方式.在每个组中添加一个表示计数的列.
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)
归档时间: |
|
查看次数: |
745 次 |
最近记录: |