我的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:那不是真正的代码只是一般的想法,我可能犯了一些错误
答案 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")