【问题标题】:Pandas: tidy multilevel dataPandas:整洁的多级数据
【发布时间】:2021-06-02 20:28:54
【问题描述】:

我正在尝试在 pandas 中将此数据集转换为整洁的格式。

我需要以这样的方式融化/重塑它,以便有一个 id 列,一个用于 Side (Left/Right),一个用于 Section (1/2/3),一个用于Size,另一个用于Distance

我对 Python 很陌生(尤其是 Pandas),我尝试过这个例子:Tidy data from multilevel Excel file via pandas

但是,我并不完全了解如何完成这项工作。 非常欢迎任何建议!

编辑:这是一个示例文件: https://wetransfer.com/downloads/bc88b005b185c48eee99fd9583483f4720210602112358/b5f691

【问题讨论】:

  • 我的意见是最好通过 dropbox、gdocs、wetranswer 分享您的 excel 示例数据......因为很难知道图片中的真实结构数据如何(如果转换为文本也是同样的问题)
  • @jezrael 刚刚在帖子中添加了一个带有示例文件的 wetransfer 链接。

标签: python pandas dataframe


【解决方案1】:

首先通过header参数在read_excel中创建MultiIndex,然后通过DataFrame.stack通过第一级和第二级重塑,最后通过DataFrame.rename_axis设置轴名称,并通过DataFrame.reset_indexMultiIndex创建列:

df = pd.read_excel('test_data.xlsx', header=[0,1,2], index_col=0)

df = df.stack([0,1]).rename_axis(index=['id','Side','Section'], columns=None).reset_index()
print (df)
    id   Side  Section  Distance  Size
0   f1   Left        1       234    12
1   f1   Left        2       678   456
2   f1   Left        3      1122   900
3   f1  Right        1      1566  1344
4   f1  Right        2      2010  1788
5   f1  Right        3      2454  2232
6   f2   Left        1       453    33
7   f2   Left        2      1293   873
8   f2   Left        3      2133  1713
9   f2  Right        1      2973  2553
10  f2  Right        2      3813  3393
11  f2  Right        3      4653  4233

【讨论】:

    猜你喜欢
    • 2020-05-21
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多