我有一个数据框:
df
ID val1 Param val2
0 0.0000 -0.7110 'A' 2.5
1 0.0000 -0.7285 'A' 2.0
2 0.0000 -0.4867 'B' 2.3
3 0.0000 -0.5729 'C' 2.2 ...
91296 0.0485 0.0733 'Y' 2.1
91297 0.0485 -0.2035 'Y' 2.24
91298 0.0485 -0.0479 'Z' 2.5
我试图运行一个循环,我为每个id + param打印一个图 附加到列表,然后将图表保存到其关联的文件夹中 一个目录。
所需:
p = []
test = df.groupby(ID) for all IDs in test:
for all unique params:
p.append(create plot per id and associated param)
这是期望的输出:
文件夹(0.0000)
--> 'A'.png
--> 'B'.png
--> 'C'.png
文件夹(0.0485)
--> 'Y'.png
--> 'Z'.png
这是我到目前为止所做的:
final_gr = df.groupby('ID') for j in final_gr.groups:
df_slice = df[df['ID'] == j]
p.append(ggplot(aes('val1','val2'), data = df_slice) + \
geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:
%s'%(str(df_slice.Param.unique())[2:-2],str(df_slice.ID.unique())),size=15,face='bold'))
+ \
theme_bw() + scale_y_continuous(name='%s'%str(df_slice.Param.unique())))
for img in p:
img.save(r'\DIRECTORY\%s\%s.png'%(str(df_slice.ID.unique())[2:-2],df_slice.Param.unique()))
答案 0 :(得分:0)
我认为你可能会在这里混淆一些核心python格式。你可能正在寻找更像这样的东西。
import os
for key, group in df.groupby(by='ID'):
p.append(ggplot(aes('val1','val2'), data = group) + \
geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:
%s'%(str(group.Param.unique())
[2:-2],str(key)),size=15,face='bold'))
+ \
theme_bw() + scale_y_continuous(name='%s'%str(group.Param.unique())))
for img in p:
os.mkdir(r'\DIRECTORY\%s'%key)
img.save(r'\DIRECTORY\%s\%s.png'(str(key[2:-2],df_slice.Param.unique()))
请注意,您可能想要创建要写入的目录,因为如果它不存在则不会自动为您创建。 (见os.mkdir)
我建议您先使用一个简单的循环检查键,循环结果组,如下所示:
for key, group in df.groupby(by='ID'):
print key
for key, group in df.groupby(by='ID'):
print group
答案 1 :(得分:0)
修正了它。刚刚在jfbeltran的代码中添加了三行,我首先(在上一步中外部)通过ID将Param名称提取到各自的文本文件,检查Param是否在ID中的文本文件中,然后创建一个匹配的新数据帧Param和ID:
for key, group in df.groupby(by='ID'):
for g in group.Param.unique():
if g in open('%s.txt'%str(key)).read():
df_slice = group[(group['ID'] == key) & (group['Param'] == g)]
p.append(ggplot(aes('Val1','Val2'), data = df_slice) + \
geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:%s'%(str(g),
str(key)),size=15,face='bold'))+ \
theme_bw() + scale_y_continuous(name='%s'%str(g)))
for img in p:
#os.mkdir(r'DIRECTORY\%s'%key)
img.save(r'DIRECTORY\%s\%s.png'%(str(key),str(g)))