【问题标题】:Dataframe to plot different charts from groups in columns用于从列中的组中绘制不同图表的数据框
【发布时间】:2018-07-22 01:59:25
【问题描述】:

我有一个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.:这不是真正的代码,只是一般的想法,我可能犯了一些错误

【问题讨论】:

  • 这里的问题到底是什么?循环的目的是什么?此处不提供minimal reproducible example 本质上意味着您要求其他人为您完成所有工作。虽然您自己创建这样的minimal reproducible example 甚至可能允许您单独解决问题而无需在这里提问 - 如果您没有minimal reproducible example 在此处发布。
  • 对不起,我把它弄复杂了,我只是想尽可能地解释,我编辑了问题以更好地复制情况,正如我在帖子中所说,问题是当我运行我的代码而不是每对索引绘制 1 个图表的代码时,它会为数据框中的每一行绘制相同的图表
  • 请注意,这里没有Multiindex。你所说的Index 是一个普通的列。
  • 我知道,我是在之后添加的,但由于某种原因它无法正常工作(在原始代码中,我不知道为什么)df.set_index(['Index1','Index2']) 我的意思是...
  • 就这样吧。索引应该以某种方式索引您的数据,如果不同行有多个相同的索引,则情况并非如此。

标签: python python-2.7 dataframe matplotlib


【解决方案1】:

我看不到循环在做什么,但是如果循环变量没有在循环内的任何地方使用,则表明甚至不需要循环是一个好兆头。

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

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")

【讨论】:

  • 嗯,这正是我的意思,很抱歉我的问题不符合规定!我对这一切都很陌生,但谢谢!最后就是这么简单,我花了几个小时在这上面……
猜你喜欢
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2016-01-05
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多