2013-11-18 6 views
2

Я работаю с pandas.groupby объекта, к которому я применил функцию как таковую:Как выбрать, какая многоиндексная ось разбивает данные в объекте groupby по разным подсети?

x = data.groupby(['congruent', 'contrast']).apply(lambda s: s.mean())[['cresp1', 'cresp2']] 

Выход print x:

     cresp1 cresp2 
congruent contrast      
False  1.0  0.423077 0.442308 
      2.0  0.537037 0.481481 
      2.5  0.576923 0.634615 
      3.0  0.568182 0.500000 
      3.5  0.675000 0.750000 
      4.0  0.687500 0.604167 
      5.0  0.687500 0.875000 
      10.0  0.869565 0.913043 
True  1.0  0.568182 0.386364 
      2.0  0.547619 0.500000 
      2.5  0.522727 0.477273 
      3.0  0.557692 0.634615 
      3.5  0.571429 0.928571 
      4.0  0.770833 0.937500 
      5.0  0.791667 0.937500 
      10.0  0.820000 0.920000 

Я хотел бы построить эти данные в двух различных сюжетных, один для всех значений, где congruent == False, а другой для всех значений, где congruent == True.

Я пытался делать x.plot(subplots=True), но это создает сюжетные для каждого столбца (т.е. cresp1 против cresp2), который не что я хочу:

enter image description here

Как я могу сделать то, что я Я пытаюсь это сделать?

ответ

3

Вы можете сделать это самостоятельно:

import pylab as pl 
import io 
import pandas as pd 

txt = """congruent contrast cresp1 cresp2 
False  1.0  0.423077 0.442308 
      2.0  0.537037 0.481481 
      2.5  0.576923 0.634615 
      3.0  0.568182 0.500000 
      3.5  0.675000 0.750000 
      4.0  0.687500 0.604167 
      5.0  0.687500 0.875000 
      10.0  0.869565 0.913043 
True  1.0  0.568182 0.386364 
      2.0  0.547619 0.500000 
      2.5  0.522727 0.477273 
      3.0  0.557692 0.634615 
      3.5  0.571429 0.928571 
      4.0  0.770833 0.937500 
      5.0  0.791667 0.937500 
      10.0  0.820000 0.920000""" 

df = pd.read_csv(io.BytesIO(txt), delim_whitespace=True).ffill() 
df = df.set_index(["congruent","contrast"]) 
levels = df.index.levels[0] 
fig, axes = pl.subplots(len(levels)) 

for level, ax in zip(levels, axes): 
    df.loc[level].plot(ax=ax, title=str(level)) 

выход:

enter image description here

+0

красивая, спасибо! – blz

+0

Мне очень нравится это решение HYRY. Есть ли хороший способ использовать его для размещения 4 графиков на сетке 2x2? –

+0

При использовании в IPython или JupyterNotebook, если вы столкнулись с строкой vs двоичной ошибки, вы можете закодировать свою строку с помощью .encode() – rahulthakur319

 Смежные вопросы

  • Нет связанных вопросов^_^