python groupby图的长度不匹配错误
Posted
技术标签:
【中文标题】python groupby图的长度不匹配错误【英文标题】:Length mismatch error for python groupby plot 【发布时间】:2018-07-22 13:45:00 【问题描述】:我想在根据工作日对某个列进行分组后绘制 df1 中某个列的平均值。 df1 根据特定列值从另一个 df 过滤。第一个数据框包含不同飞机类型的劳动力数据。我过滤 df1 的平面类型,然后每周绘制劳动数据的平均值。以下是代码:
df1 = df[df['Aircraft'].str.contains('SB_A330')]
weekday = df1['Labor_Hrs'].groupby(df1.index.dayofweek).mean()
weekday.index = ['Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun']
weekday.plot(style=['-'])
此代码仅适用于某些类别,其中一些类别出现长度不匹配错误。例如如果有飞机类别“A”、“B”、“C”和“D”,它适用于“A”和“B”,另一个我收到以下错误:
"长度不匹配:预期轴有 1 个元素,新值有 7 个 元素”或
"长度不匹配:预期轴有 3 个元素,新值有 7 个 元素”
我得到的图表是这样的:
【问题讨论】:
你能举一个你的数据框的例子吗?我猜这与您的weekday.index
行有关,其中 groupby 的返回时间不到 7 天。
是的,确实是在 weekday.index 中。重新索引功能修复了它。
【参考方案1】:
您需要reindex
为Series
添加缺失天数,长度为7
:
weekday=df1['Labor_Hrs'].groupby(df1.index.dayofweek).mean().reindex(range(7), fill_value=0)
示例:
rng = pd.date_range('2017-04-03', periods=6, freq='59H')
df1 = pd.DataFrame('Labor_Hrs': range(6), index=rng)
print (df1)
Labor_Hrs
2017-04-03 00:00:00 0
2017-04-05 11:00:00 1
2017-04-07 22:00:00 2
2017-04-10 09:00:00 3
2017-04-12 20:00:00 4
2017-04-15 07:00:00 5
weekday=df1['Labor_Hrs'].groupby(df1.index.dayofweek).mean().reindex(range(7), fill_value=0)
weekday.index = ['Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun']
print (weekday)
Mon 1.5
Tues 0.0 <-added 0 for missing
Wed 2.5
Thurs 0.0 <-added 0 for missing
Fri 2.0
Sat 5.0
Sun 0.0 <-added 0 for missing
Name: Labor_Hrs, dtype: float64
【讨论】:
该错误现已修复。谢谢你的清晰解释。以上是关于python groupby图的长度不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章
Python - groupby 多列 - ValueError:分组器和轴必须相同的长度
如何对不同长度的 Python Pandas groupby 对象进行切片?
奇怪的“返回的数据与列的预期数据长度不匹配”错误,而预期长度要大得多 - SQL SERVER 2012