Как выполнить итерацию и применить функцию к одному уровню DataFrame с помощью MultiIndex?

Благодаря ответу на мой первоначальный вопростеперь у меня есть мультииндексированный DataFrame так, как я хочу. Теперь, когда у меня есть данные в структуре данных, я пытаюсь их извлечь и думаю, есть ли лучший способ сделать это. Мои две проблемы связаны, но могут иметь отдельные «идеальные» решения:

Sample 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', 'произошло по индексу 2010-11-26 12:00:00')независимо от того, использую ли я ось=1или axis=0, Я пытался перестроить новый DataFrame, используя обходной путь итерации, указанный выше, но я всегда беспокоюсь, когда делаю грубую силу. Есть ли более «пандасический» способ сделать это вид вычислений?

5
задан Community 23 May 2017 в 12:33
поделиться