我有这种pandas.DataFrame.得到“x”和“y”时,“a”,“b”是条件.
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.
UPDATE2
如果我有以下“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])
解决方法:
那是你要的吗?
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)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。