绘制带有条件列的 pandas DataFrame

Posted

技术标签:

【中文标题】绘制带有条件列的 pandas DataFrame【英文标题】:plot pandas DataFrame with condition columns 【发布时间】:2016-07-02 08:50:05 【问题描述】:

我有这种 pandas.DataFrame。 "a","b" 是获取 "x" 和 "y" 时的条件。

df = pd.DataFrame([[10,20,0,.1], [10,20,1,.5], [100,200,0,.33], [100,200,1,.11]], columns=["a", "b", "x", "y"])
df

我需要针对相同条件绘制 (x,y) 列的折线图。预期结果图为:

当然,这个图片是由下面的代码手动给出的:

pd.DataFrame([[0,.1],[1,.5]]).plot(kind="line", x=0, y=1, style="-", legend=None, title="a: 10, b: 20")
plt.xlabel("x")
plt.ylabel("y")
plt.figure()
pd.DataFrame([[0,.33],[1,.11]]).plot(kind="line", x=0, y=1, style="-", legend=None, title="a: 100, b: 200")
plt.xlabel("x")
plt.ylabel("y")

我的问题是如何在获取包含条件列 x 和 y 的数据框时动态制作如上图。

更新

列名是固定的。但是,条件列的值是动态更改的。所以,我不能使用值 10、20、100、200。

更新2

如果我有下面的“filter_with_a_and_b”方法,我认为问题解决了:

def filter_with_a_and_b(df, a_b):
    # how to implement?

a_b_list = df.drop_duplicates(["a","b"])
new_df_list = filter_with_a_and_b(df, a_b)
for idx, df in enumerate(new_df_list):
    df.plot(title=a_b_list[idx])

【问题讨论】:

您的条件的来源是什么?您希望在哪些列上应用这些条件? @MaxU 请参阅 update2。 所以您想过滤列ab 与列ab 的值,这将产生相同的数据框 - 这就是您想要的吗? ;) 您是否只想为 (a, b) 的所有唯一组合绘制 (x, y)? IE。如果您有 (a,b) 的三种不同组合 - 这将产生三个具有相应 (x,y) 的图 - 我理解正确吗? @MaxU 是的!绝对 【参考方案1】:

这就是你想要的吗?

df.loc[(df.a == 10) & (df.b == 20), ['x','y']].plot(title='a: 10, b: 20')

现在让我们更聪明一点:

cond = 'a': 100, 'b': 200
df.loc[(df.a == cond['a']) & (df.b == cond['b']), ['x','y']].plot(title='a: a, b: b'.format(**cond))

或使用query():

q = 'a == 100 and b == 200'
df.query(q)[['x','y']].plot(title=q)

更新:

a_b_list = df[['a','b']].drop_duplicates()

[df.loc[(df.a == tup[0]) & (df.b == tup[1]), ['x','y']] \
   .plot(x='x', y='y', kind='line', style='-',title='a: 0[0], b: 0[1]'.format(tup)) \
   .set_ylabel('y')
 for tup in a_b_list.itertuples(index=False)]

【讨论】:

@MaxU 对不起,我的意思是条件值应该动态改变。 @rkjt50r983,您想如何动态更改它们?你能举个例子吗?

以上是关于绘制带有条件列的 pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Panda MultiIndex Dataframe 中绘制 ylabel

在不同的绘图行上绘制 Pandas Dataframe 中的列的简单方法?

带有分类标记的行/列的散点图 Pandas DataFrame

如何创建带有列的 Pandas DataFrame?

Pandas 从剪贴板读取带有日期时间列的 DataFrame

pandas使用组合条件判断数据列的内容筛选符合条件的数据行(selecting rows based on a condition in dataframe)