【发布时间】:2016-02-01 09:39:16
【问题描述】:
我有一个如下所示的文件:
Location Code Trait ID Effective Date
WAU1 23984,24896,27576 06/05/2014 ,06/05/2014 ,06/12/2014
WAU2 126973,219332 06/05/2014 ,06/05/2014
WAU3 24375 06/05/2014
WAU4 23984 06/05/2014
WAU5 5199,23984 NULL
WAU6 12342,224123 06/05/2014
请注意第二列和第三列是值的“列表”。某些行包含每个列表中元素数量的完全匹配,其他行丢失或根本不存在(null)。我需要创建一个类似于以下的单个数据框
Location Code Trait ID Effective Date
0 WAU1 23984 06/05/2014
1 WAU1 24896 06/05/2014
2 WAU1 27576 06/12/2014
3 WAU2 126973 06/05/2014
4 WAU2 219332 06/05/2014
5 WAU3 24375 06/05/2014
6 WAU4 23984 06/05/2014
7 WAU5 5199 NaN
8 WAU5 23984 NaN
9 WAU6 12342 06/05/2014
10 WAU6 224123 NaN
我已经能够使用以下方法将每个“列表”列分成单独的数据框:
df1 = df1['Trait ID'].str.split(',').apply(pd.Series,1).stack()
df1.index = df1.index.droplevel(-1)
df1.name = 'Trait ID'
del df1['Trait ID']
df1 = df1.join(trait_id)
这给了我类似的东西:
Location Code Trait ID
0 WAU1 23984
0 WAU1 24896
0 WAU1 27576
1 WAU2 126973
1 WAU2 219332
2 WAU3 24375
3 WAU4 23984
4 WAU5 5199
4 WAU5 23984
5 WAU6 12342
5 WAU6 224123
我可以使用上述相同的逻辑创建另一个带有“生效日期”列表的数据框,以生成以下内容:
Location Code Effective Date
0 WAU1 06/05/2014
0 WAU1 06/05/2014
0 WAU1 06/12/2014
1 WAU2 06/05/2014
1 WAU2 06/05/2014
2 WAU3 06/05/2014
3 WAU4 06/05/2014
4 WAU5 NaN
5 WAU6 06/05/2014
我正在努力在 pandas 中找到合适的“函数”(例如 join、merge、concat)来将两个数据帧组合成我想要的输出。虽然我感觉它是它们的组合,但在某处有一个 reset_index()。
【问题讨论】:
-
数据源是什么类型的“文件”?什么是分隔符(逗号、竖线、制表符)?它是否偶尔会错过这样的逗号?请问这个数据源(HTML、XML、RDMS等)的来源在哪里?
-
它是一个制表符分隔的文件,在文件的第 2 列和第 3 列中,是由逗号分隔的一串值。我需要将第二列分成几行,然后如果第二列值的“原始”索引有匹配元素(如果这有任何意义),则将第三列“附加”到该行。否则,外推的行应该得到一个 Nan/NULL 等。