gpt4 book ai didi

python - Multiindex 仅对 Pandas 中的某些列进行多索引

转载 作者:太空狗 更新时间:2023-10-30 01:06:38 27 4
gpt4 key购买 nike

我有一个以我无法更改的格式生成的 csv。该文件具有多索引。该文件看起来像这样。

enter image description here

最终目标是将最上面的行(小时)变成一个索引,并用“ID”列对其进行索引,以便数据看起来像这样。

enter image description here

我已经将文件导入 pandas...

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

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

enter image description here

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

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

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

最佳答案

我相信您缺少的行可能是 # 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 列的第一个值将元组转换为字符串。标题。
  2. 通过将这些标题放在索引中来保护它们。

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

例如

之前

  (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

关于python - Multiindex 仅对 Pandas 中的某些列进行多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35951786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com