分组数据的Pandas数据框图

prdp8dxp  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(165)

我有一个茶叶出口公司的数据集,它包括总出口和茶叶类型和重量类别。
它看起来像这样

Date        Type    Weight    Quantity      Price
2016-01-01  black   bags      1734136.51    1131.30
2016-01-01  black   bulk      10722389.66   510.86
2016-01-01  black   4g_1kg    6817078.01    588.72
2016-01-01  black   1kg_3kg   86444.50      565.91
2016-01-01  black   3kg_5kg   1003986.73    552.39

现在我已经用这个对数据进行了分组

df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date']).dt.date
df['YearMonth'] = df['Date'].map(lambda date: 100*date.year + date.month)

df = df.groupby(['YearMonth','Type', 'Weight']).agg({'Quantity':'sum'})

Dataframe 现在看起来像这样

YearMonth   Type    Weight     Quantity
201601      black   1kg_3kg    86444.50
                    3kg_5kg    1003986.73
                    4g_1kg     6817078.01
                    5kg_10kg   2816810.33
                    bags       1734136.51
                    bulk       10722389.66
            green   3kg_5kg    12.00
                    4g_1kg     53014.95
                    5kg_10kg   1132.00
                    bags       41658.19
                    bulk       112400.00
            instant 4g_1kg     28.80
                    lt3kg      89486.40
201602      black   1kg_3kg    215539.60

现在我想把它绘制成一个图表。日期在x轴,类型和重量在y轴。我试了下面的代码,但它给我一个错误。

fig, ax = plt.subplots(figsize=(10,4))
for key, df in df.groupby(['Quantity']):
    ax.plot(df['Type'], df['Weight'], label=key)

ax.legend()
plt.show()

我得到的错误是

KeyError                                  Traceback (most recent call last)
Cell In[798], line 9
      7 fig, ax = plt.subplots(figsize=(10,4))
      8 for key, df in df.groupby(['Quantity']):
----> 9     ax.plot(df['Type'], df['Weight'], label=key)
     11 ax.legend()
...
   3807     #  InvalidIndexError. Otherwise we fall through and re-raise
   3808     #  the TypeError.
   3809     self._check_indexing_error(key)

KeyError: 'Type'

谁能告诉我为什么会发生这种情况,以及用我上面分组的数据框绘制曲线的最佳方法?

ogq8wdun

ogq8wdun1#

groupby后面有一个多索引,因此没有列标签“type”。您可以选择索引为“black”且yearmonth为201601的组,如下所示,然后绘图:对于使用不同符号和标记颜色的不同类型可以进行相同的操作。

df2 = df.loc[201601, 'black']
plt.scatter(df2.index, df2['Quantity'])

plt.show()

相关问题