数据框,用于绘制列中组的不同图表

时间:2018-02-11 22:48:12

标签: python python-2.7 dataframe matplotlib

我的dataframe有多列,包含不同的类别([' A'],[' 1',' 2', ' 3'' 4'])

Index1 Index2    X    Y
A      '1'       1    2
A      '1'       5    3
A      '1'       3    4
A      '2'       3    1
A      '2'       4    1
A      '2'       3    5 
A      '2'       1    2
A      '3'       5    3
A      '3'       3    4
A      '4'       3    1
A      '4'       4    1
A      '4'       3    5

我需要循环它,以便为每对索引带来四个不同的泼溅图表(将来会有一个B索引,这就是多索引的原因)。

我的代码目前为我带来了每行一个图表(在这个例子中将是12个),如果我break在最后它只给我一个

我尝试了.iterows().itertuples()他们两个都得到了相同的结果(可能一直使用它们错了)

import pandas as pd
from matplotlib import pyplot as plt

Index1 = ['A','A','A','A','A','A','A','A','A','A','A','A']
Index2 = ['1','1','1','2','2','2','2','3','3','4','4','4']
X = [1,5,3,3,4,3,1,5,3,3,4,3]
Y = [2,3,4,1,1,5,2,3,4,1,1,5]
df = pd.DataFrame(Index1)
df = df.assign(Index2 = Index2,X=X,Y=Y)
df.set_index(['Index1','Index2'])

second_index = 1     
for index in df.itertuples():
    df = df.groupby('Index2').get_group(second_index)
    df.plot.scatter(x = 'X', y = 'Y')
    plt.show()
    break  

我有一个类似的代码在dictionary运行,它运行相同的逻辑,它带给我所需的所有图表。

p.s:那不是真正的代码只是一般的想法,我可能犯了一些错误

1 个答案:

答案 0 :(得分:0)

我不知道循环在做什么,但如果在循环内的任何地方都没有使用循环变量,那么这是一个很好的迹象,甚至不需要循环。

这里似乎你想要绘制每个组,因此

df.groupby("Index2").plot(x="X", y="Y", kind="scatter")

完整示例:

import pandas as pd
from matplotlib import pyplot as plt

Index1 = ['A','A','A','A','A','A','A','A','A','A','A','A']
Index2 = ['1','1','1','2','2','2','2','3','3','4','4','4']
X = [1,5,3,3,4,3,1,5,3,3,4,3]
Y = [2,3,4,1,1,5,2,3,4,1,1,5]
df = pd.DataFrame(Index1)
df = df.assign(Index2 = Index2,X=X,Y=Y)

df.groupby("Index2").plot(x="X", y="Y", kind="scatter")

plt.show()

但是,如果你真的想要以任何理由循环,你可以循环groupby

for (n, group) in df.groupby("Index2"):
    group.plot.scatter(x="X", y="Y")