我认为这可能与缺少单位/我的单位没有连续编号的事实有关。

我有一个带有在不同年份中测量的batchID的df,但是许多batchID仅在一年(也许是两年)中起作用。

我仍想绘制一段时间内样本的发展情况。

任何想法如何解决? df.to_dict()是here

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.tsplot(df, time='Year', value='Quality', unit='BatchID', condition='Vegetable')

最佳答案

是的,您的时间行丢失了。

一种可能的解决方案是通过groupbyBatchID通过reindexmin max创建的范围使用Year,并且用ffillbffil填充缺少的值,这与fillna中的方法相同>:

来自:

print (df.head(3))
   BatchID      Farmer  Quality Vegetable  Year
0       31  Pepperidge     0.55    Potato     9
1       31  Pepperidge     0.80    Potato    10
2       95     Johnson     0.50    Carrot     6


得到这个24行:

df1 = df.groupby('BatchID')
        .apply(lambda x: x.set_index('Year')
                          .reindex(range(df.Year.min(), df.Year.max() + 1)).ffill().bfill())
       .reset_index(level=1)
       .reset_index(drop=True)

print (df1.head(24))
    Year  BatchID      Farmer  Quality Vegetable
0      1     31.0  Pepperidge     0.55    Potato
1      2     31.0  Pepperidge     0.55    Potato
2      3     31.0  Pepperidge     0.55    Potato
3      4     31.0  Pepperidge     0.55    Potato
4      5     31.0  Pepperidge     0.55    Potato
5      6     31.0  Pepperidge     0.55    Potato
6      7     31.0  Pepperidge     0.55    Potato
7      8     31.0  Pepperidge     0.55    Potato
8      9     31.0  Pepperidge     0.55    Potato
9     10     31.0  Pepperidge     0.80    Potato
10    11     31.0  Pepperidge     0.80    Potato
11    12     31.0  Pepperidge     0.80    Potato
12     1     95.0     Johnson     0.50    Carrot
13     2     95.0     Johnson     0.50    Carrot
14     3     95.0     Johnson     0.50    Carrot
15     4     95.0     Johnson     0.50    Carrot
16     5     95.0     Johnson     0.50    Carrot
17     6     95.0     Johnson     0.50    Carrot
18     7     95.0     Johnson     0.50    Carrot
19     8     95.0     Johnson     0.50    Carrot
20     9     95.0     Johnson     0.50    Carrot
21    10     95.0     Johnson     0.50    Carrot
22    11     95.0     Johnson     0.50    Carrot
23    12     95.0     Johnson     0.50    Carrot


sns.tsplot(df1, time='Year', value='Quality', unit='BatchID', condition='Vegetable')


python - tsplot不绘图(再次)-LMLPHP

10-04 17:43