展平和展开 csv 文件?
Posted
技术标签:
【中文标题】展平和展开 csv 文件?【英文标题】:Flatten and expand a csv file? 【发布时间】:2014-11-09 11:08:18 【问题描述】:目标:
我想转换以下架构:
group, id, name
A, 12345, "eeny"
A, 23456, "meeny"
A, 34567, "miney mo"
B, 99999, "foo"
B, 88888, "bar"
B, 77777, "foobar"
进入:
group, id1, name1, id2, name2, id3, name3
A, 12345, "eeny", 23456, "meeny", 34567, "miney mo"
B, 99999, "foo", 88888, "bar", 77777, "foobar"
在 Python 的上下文中,我假设使用 Pandas groupby() 和/或 unstack() 可以最好地完成,但我遇到的大多数文档都与数值计算有关,而不是字符串。
任何帮助将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:这是一种方法。添加表示每个组内计数的列。
df['group_num'] = df.groupby('group')['id'].transform(lambda x: range(1, len(x)+1))
然后,使用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
这会将列设置为 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
【讨论】:
以上是关于展平和展开 csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章
在 BigQuery 中展平嵌套和重复的结构(标准 SQL)
powershell Powershell脚本用于解析csv中的xml并展开它