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】:

您需要reindexSeries 添加缺失天数,长度为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 对象进行切片?

ValueError:数据(3)的长度和错误5不匹配

奇怪的“返回的数据与列的预期数据长度不匹配”错误,而预期长度要大得多 - SQL SERVER 2012

如何在 matplotlib 中调整树状图的分​​支长度(如在 astrodendro 中)? [Python]

图论 —— 二分图的判定及最大匹配