我认为这可能与缺少单位/我的单位没有连续编号的事实有关。
我有一个带有在不同年份中测量的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')
最佳答案
是的,您的时间行丢失了。
一种可能的解决方案是通过groupby
和BatchID
通过reindex
和min
max
创建的范围使用Year
,并且用ffill
和bffil
填充缺少的值,这与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')