gpt4 book ai didi

python - 如何使用 MultiIndex 在 DataFrame 的单个级别上迭代和应用函数?

转载 作者:太空狗 更新时间:2023-10-30 01:03:08 25 4
gpt4 key购买 nike

感谢对我的 initial question 的回复,我现在有一个我想要的多索引 DataFrame。现在我在数据结构 中有了数据,我正在尝试将其取出并想知道是否有更好的方法来执行此操作。我的两个问题是相关的,但可能有单独的“理想”解决方案:

示例 DataFrame(已截断)

Experiment           IWWGCW         IWWGDW       
Lead Time 24 48 24 48
2010-11-27 12:00:00 0.997 0.991 0.998 0.990
2010-11-28 12:00:00 0.998 0.987 0.997 0.990
2010-11-29 12:00:00 0.997 0.992 0.997 0.992
2010-11-30 12:00:00 0.997 0.987 0.997 0.987
2010-12-01 12:00:00 0.996 0.986 0.996 0.986

迭代

我希望能够遍历此 DataFrame,其中迭代只会使我下降 1 个索引维度,即 iteritems 行为将返回 [('IWWGCW', df['IWWGCW']), ('IWWGDW', df['IWWGDW'])] 并产生 2 个具有提前期列的数据帧。我的蛮力解决方案是使用一个包装例程,它基本上执行 [(key, df[key] for key in df.columns.levels[0]]。有没有更好的方法来做到这一点?

申请

我还想做一些事情,比如“从其他人中减去 IWWGDW 条目”来计算配对差异。我尝试执行 df.apply(lambda f: f - df['IWWGDW']) 但得到一个 KeyError: ('IWWGDW', 'occurred at index 2010-11-26 12 :00:00') 无论我使用 axis=1 还是 axis=0。我已经尝试使用上面确定的迭代解决方法重建一个新的 DataFrame,但是当我用暴力破解时我总是担心。是否有更“ Pandas ”的方式来进行这种计算?

最佳答案

我建议使用 groupby 进行迭代:

In [25]: for exp, group in df.groupby(level=0, axis=1):
....: print exp, group
....:
IWWGCW Experiment IWWGCW
Lead Time 24 48
2010-11-27 12:00:00 0.997 0.991
2010-11-28 12:00:00 0.998 0.987
2010-11-29 12:00:00 0.997 0.992
2010-11-30 12:00:00 0.997 0.987
2010-12-01 12:00:00 0.996 0.986
IWWGDW Experiment IWWGDW
Lead Time 24 48
2010-11-27 12:00:00 0.998 0.990
2010-11-28 12:00:00 0.997 0.990
2010-11-29 12:00:00 0.997 0.992
2010-11-30 12:00:00 0.997 0.987
2010-12-01 12:00:00 0.996 0.986

但是,我发现这并没有像您所寻找的那样降低顶层。理想情况下,您可以编写如下内容:

df.groupby(level=0, axis=1).sub(df['IWWGCW'])

并让它进行成对减法,但是因为 df['IWWGCW'] 降低了级别,所以列名不对齐。但这有效:

In [29]: df.groupby(level=0, axis=1).sub(df['IWWGCW'].values)
Out[29]:
Experiment IWWGCW IWWGDW
Lead Time 24 48 24 48
2010-11-27 12:00:00 0 0 0.001 -0.001
2010-11-28 12:00:00 0 0 -0.001 0.003
2010-11-29 12:00:00 0 0 0.000 0.000
2010-11-30 12:00:00 0 0 0.000 0.000
2010-12-01 12:00:00 0 0 0.000 0.000

我会再考虑一下。

关于python - 如何使用 MultiIndex 在 DataFrame 的单个级别上迭代和应用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057222/

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