- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个像这样的 df:
Year Grass Crop Forest Ecoregion CRP
1993 30.41268857 68.45446692 0.255632102 46e 0508common
2001 47.29988968 47.68577796 0.509939614 46e 0508common
2006 71.37357063 20.40485399 0.908684114 46e 0508common
1993 27.17246635 71.97582809 0.12611897 46k 0508common
2001 65.74087991 30.61323084 0.1229253 46k 0508common
2006 81.763099 12.4386173 0.180860941 46k 0508common
1993 30.83567893 68.14034747 0.737649228 46e 05f08
2001 59.45355722 35.68378142 0.354265748 46e 05f08
2006 64.98592643 28.61787829 0.339706881 46e 05f08
1993 28.38187702 71.40776699 0.080906149 46k 05f08
2001 81.90938511 15.4368932 0.118662352 46k 05f08
2006 86.3214671 9.207119741 0.172599784 46k 05f08
1993 18.46387279 80.77686402 0.270081631 46e 05f97
2001 41.23923454 53.1703113 0.605111585 46e 05f97
2006 65.30004066 25.45626696 0.989918731 46e 05f97
1993 20.34764075 78.68863002 0.218653535 46k 05f97
2001 55.42761042 39.96085063 0.191151874 46k 05f97
2006 76.34526161 16.53176535 0.246221691 46k 05f97
我想根据 Ecoregion
创建基于分组的图表。然后在每个 Ecoregion
中,我想根据唯一的 CRP
绘制图表,因此每个唯一的 Ecoregion
将获得自己的 pdf 文件,然后在该文件中将是基于CRP
的图表。在本例中,Ecoregion
46e
将具有三个图表(0508common
、05f08
和 05f97
)和 Ecoregion
46k
也将具有三个图表。
我正在尝试以下代码:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
import os
df=pd.read_csv(r'C:\pathway_to_file.csv')
group=df.groupby(['Ecoregion'])
pdf_files = {}
out=r'C:\output_location'
for ecoregion, outer_group in df.groupby(['Ecoregion']):
with PdfPages(os.path.join(out,ecoregion + '.pdf')) as pdf:
for crp, inner_group in outer_group.groupby(['CRP']):
title=crp + '_' + ecoregion
lu_colors=(['g','y','b','r', 'k'])
plot=group.plot(x=['Year'], y=['Grass', 'Crop', 'Forest'],kind='bar', colors=lu_colors, title=title).get_figure()
plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5))
plt.xticks(rotation=70)
plt.set_xlabel('Year')
plt.set_ylabel('Percent')
pdf.savefig(plot)
plt.close(plot)
但这不能正常工作,这些图表甚至不是我想要的条形图。
如何让一个单独的图表像我想要的那样的示例是这样的,但这并没有像我想要的那样使用 groupby:
with PdfPages(r'G:\graphs.pdf') as pdf:
lu_colors=(['g','y','b','r', 'k'])
ax=df.set_index('Year').plot(title='0508common_46e', kind='bar', colors=lu_colors)
plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5))
plt.xticks(rotation=70)
ax.set_xlabel('Year')
ax.set_ylabel('Percent')
fig=plt.gcf()
pdf.savefig(fig)
plt.close(fig)
在这种情况下,df 将是:
Year Grass Crop Forest Ecoregion CRP
1993 30.41268857 68.45446692 0.255632102 46e 0508common
2001 47.29988968 47.68577796 0.509939614 46e 0508common
2006 71.37357063 20.40485399 0.908684114 46e 0508common
最佳答案
你的剧情有错误。您必须绘制内部组(igr
)而不是外部组。我稍微改变了你的代码,使其更加流畅:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
import os
lu_colors=(['g','y','b','r','k'])
df = pd.read_csv('1.csv', header=0, usecols = [0,1,2,3,4,5])
for ecor, ogr in df.groupby(['Ecoregion']):
with PdfPages(os.path.join("./pdf", ecor.strip()+'.pdf')) as pdf:
for crp, igr in ogr.groupby(['CRP']):
title = crp.strip() + '_' + ecor.strip()
plot = igr.plot(x=['Year'], y=['Grass', 'Crop', 'Forest'], kind='bar', colors=lu_colors, title=title).get_figure()
plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5))
plt.xticks(rotation=70)
ax = plt.gca()
ax.set_xlabel('Year')
ax.set_ylabel('Percent')
pdf.savefig(plot, bbox_inches='tight', pad_inches=0)
plt.close(plot)
关于python - 基于groupby的绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822419/
给定输入: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 将数字按奇数或偶数分组,然后按小于或大于 5 分组。 预期输出: [[1, 3, 5], [2, 4], [6, 8, 10
编辑: @coldspeed、@wen-ben、@ALollz 指出了我在字符串 np.nan 中犯的新手错误。答案很好,所以我不删除这个问题来保留那些答案。 原文: 我读过这个问题/答案 What'
我试图概括我提出的问题 here . mlb 数据框看起来像 Player Position Salary Year 0 Mike Wit
我认为我不需要共享整个数据框,但基本上,这是有问题的代码行(当然,已经导入了 pandas) divstack = df[df['Competitor']=='Emma Slabach'].group
我面临下一个问题:我有组(按 ID),对于所有这些组,我需要应用以下代码:如果组内位置之间的距离在 3 米以内,则需要将它们添加在一起,因此将创建一个新组(代码如何创建我在下面显示的组)。现在,我想要
我有以下数据: ,dateTime,magnitude,occurrence,dateTime_s 1,2017-11-20 08:00:09.052260,12861,1,2017-11-20 08
我按感兴趣的列对 df 进行分组: grouped = df.groupby('columnA') 现在我只想保留至少有 5 名成员的组: grouped.filter(lambda x: len(x
数据是一个时间序列,许多成员 ID 与许多类别相关联: data_df = pd.DataFrame({'Date': ['2018-09-14 00:00:22',
选择 u.UM_TOKEN_NO 、u.UM_FULLNAME、u.SECTOR、u.department_name、t.TS_PROJECT_CODE、sum(t.TS_TOTAL_HRS) 来自
我有这两个表: +---------------+-------------+---------------------+----------+---------+ | items_ordered |
我正在使用 groupby 和 sum 快速汇总两个数据集 一个包含: sequence shares 1 100 2 200 3 50 1 2
这个问题在这里已经有了答案: list around groupby results in empty groups (3 个答案) itertools groupby object not out
我有一组行,我想按标识符的值进行分组 - 存在于每一行中 - 然后对将作为结果的组进行进一步的隔离处理。 我的数据框是这样的: In [50]: df Out[50]: groupkey b
假设您要在全局范围内销售产品,并且希望在某个主要城市的某个地方设立销售办事处。您的决定将完全基于销售数字。 这将是您的(简化的)销售数据: df={ 'Product':'Chair', 'Count
我有一个将数据分组两次的查询: var query = (from a in Context.SetA() from b in Context.SetB().Where(x => x.aId == a
我有一个这种格式的数据框: value identifier 2007-01-01 0.087085 55 2007-01-01 0.703249
这个问题在这里已经有了答案: python groupby behaviour? (3 个答案) 关闭 4 年前。 我有一个这样的列表 [u'201003', u'200403', u'200803
在 Python 中,我可以使用 itertools.groupby 将具有相同键的连续元素分组。 : >>> items = [(1, 2), (1, 5), (1, 3), (2, 9), (3,
无法翻译以下 GroupBy 查询并将引发错误:不支持客户端 GroupBy IEnumerable ids = new List { 1, 2, 3 }; var q = db.Comments.W
考虑一个 Spark DataFrame,其中只有很少的列。目标是对其执行 groupBy 操作,而不将其转换为 Pandas DataFrame。等效的 Pandas groupBy 代码如下所示:
我是一名优秀的程序员,十分优秀!