展平和展开 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章

以更快的方式展平和扩展 json

在 BigQuery 中展平嵌套和重复的结构(标准 SQL)

powershell Powershell脚本用于解析csv中的xml并展开它

如何在 PHP 中展开多维数组(原始键访问路径存储为单个键)?

在 Pyspark SQL 中展开 JSON

如何把csv文件导入到sql数据库