【问题标题】:Pandas Trial Repetioin indexingPandas 试验重复索引
【发布时间】:2013-04-01 03:09:48
【问题描述】:

我有一个数据集,其中图片展示了 3 次,并且每次展示都进行了测量。预期我想标准化每张图片的值(基于 3 次重复 - 所以 3 个数字)并在类别上运行 ANOVA:第一次演示、第二次演示、第三次演示(适用于所有图片)。然而,在开始之前,我必须重新组织我的数据,以便我可以根据图片名称和重复次数轻松访问数据。

我想转换一个看起来像这样的熊猫数据框:

viola.jpg          0.61  1.968234      1
vlasta.jpg         0.79  1.836025      2
zelmira.jpg        0.76  1.955471      3
viola.jpg          0.71  1.968234      4
vlasta.jpg         0.89  1.836025      5
zelmira.jpg        0.76  1.955471      6
viola.jpg          0.31  1.968234      7
vlasta.jpg         0.79  1.836025      8
zelmira.jpg        0.26  1.955471      9

对于一个看起来像这样的人:

viola.jpg   1   0.61    1.968234        1
            2   0.71    1.968234        4
            3   0.31    1.968234        7
vlasta.jpg  1   0.79    1.836025        2
            2   0.89    1.836025        5
            3   0.79    1.836025        8
zelmira.jpg 1   0.76    1.955471        3
            2   0.76    1.955471        6
            3   0.26    1.955471        9

我尝试过以各种组合方式使用 df.groupby()、df.pivot 和 df.stack(),但显然它们甚至没有模糊地做我正在寻找的事情 - 有什么想法吗?

【问题讨论】:

    标签: indexing dataframe pandas


    【解决方案1】:

    如果您有一个 DataFrame df,您可以将您的 image namemeasurement id 字段设置为索引然后排序。这将按照您的需要对数据进行排序。

    df2 = df.set_index("pic_name", "meas_id").sort()
    

    groupbypivot 非常适合对数据组执行聚合,或者当您需要对各个组执行特定操作时。 stackunstack 有助于重塑数据,但将索引移动到列,反之亦然。

    【讨论】:

    • 哇 - 太棒了,很简单,谢谢 :) 你能否告诉我如何获得 1-3 编号(我需要这个来为 ANOVA 选择我的类别)
    • @TheChymera,你对每张图片都有精确的 3 次测量吗?
    • 你可以试试meas_id = [1,2,3] * (len(df2.index) / 3),然后再做df3 = df2.reset_index().set_index(["pic_name", meas_id])。我认为只要没有丢失测量值,这应该可以工作。
    猜你喜欢
    • 2013-12-10
    • 2020-11-22
    • 2019-06-13
    • 1970-01-01
    • 2022-01-17
    • 2018-02-11
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多