仅对熊猫中的某些列进行多索引

拉里·怀尔德曼爵士

我有一个无法更改的CSV格式。该文件具有多索引。该文件如下所示。

在此处输入图片说明

最终目标是将第一行(小时)转换为索引,并使用“ ID”列对其进行索引,以便数据看起来像这样。

在此处输入图片说明

我已将档案汇入熊猫...

myfile = 'c:/temp/myfile.csv'
df = pd.read_csv(myfile, header=[0, 1], tupleize_cols=True)
pd.set_option('display.multi_sparse', False)
df.columns = pd.MultiIndex.from_tuples(df.columns, names=['hour', 'field'])
df

但这给了我三个未命名的字段:

在此处输入图片说明

我的最后一步是按小时堆叠:

df.stack(level=['hour'])

但是我错过了之前的内容,即使在它们上面有空白的多索引行,也可以在其中索引其他列。

hilberts_drinking_problem

我相信您缺少的行可能是#3和4:

df = pd.io.parsers.read_csv('temp.csv', header = [0,1], tupleize_cols = True)
df.columns = [c for _, c in df.columns[:3]] + [c for c in df.columns[3:]]
df = df.set_index(list(df.columns[:3]), append = True)
df.columns = pd.MultiIndex.from_tuples(df.columns, names = ['hour', 'field'])
  1. 通过删除第一个3 col的第一个值,将元组转换为字符串。标头。
  2. 通过将它们放置在索引中来掩盖这些标题。

执行之后stack,您可以根据需要重置索引。

例如

之前

  (Unnamed: 0_level_0, Date)  (Unnamed: 1_level_0, id)  \
0                  3/11/2016                         5   
1                  3/11/2016                         6   

  (Unnamed: 2_level_0, zone)  (100, p1)  (100, p2)  (200, p1)  (200, p2)  
0                        abc      0.678      0.787      0.337      0.979  
1                        abc      0.953      0.559      0.776      0.520  

field                        p1     p2
  Date      id zone hour              
0 3/11/2016 5  abc  100   0.678  0.787
                    200   0.337  0.979
1 3/11/2016 6  abc  100   0.953  0.559
                    200   0.776  0.520

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章