这是一个非常棘手的问题,因为我可以找到如何分别完成每个任务,但希望将它们放在一起,尤其是按组应用。目标是使用2个值作为范围,并在给定的时间间隔内对其进行插值。接下来,我想要一列带有总和的列(但是,我对此很熟悉。这是我在groupby中不了解的插值函数)。
如前所述,我从一个基础开始,它可以完美地工作,即:
df = pd.DataFrame({'minute':[1,3,4,5,8],'value':[1,4,7,10,13]})
max_value = df['minute'].max()
df.index = df.minute
df2 = pd.DataFrame({'minute':range(0,max_value), 'Value':0})
df2.index = df2.minute
df2.value = df.value
df2= df2.fillna(0)
但是,现在再增加一列,如何将其应用于'id''a'
和id
'h'
?
因此,给出此数据框:
df = pd.DataFrame([['a', '0', '10'],
['a', '1', '10'],
['h', '2', '15'],
['a', '1', '10'],
['h', '3', '20'],
['h', '13', '5']], columns = ['id','minute','value'])
我想生成此输出,该输出将按id
列分组,由minute
列进行插值,其中min为0,max为该列中的最大值,并且在值列中输入0。
示例输出:
id minute value sum
a 0 10 10
a 1 20 30
a 2 0 30
a 3 0 30
a 4 0 30
a 5 0 30
a 6 0 30
a 7 0 30
a 8 0 30
a 9 0 30
a 10 0 30
a 11 0 30
a 12 0 30
a 13 0 30
h 0 0 0
h 1 0 0
h 2 15 15
h 3 20 35
h 4 0 35
h 5 0 35
h 6 0 35
h 7 0 35
h 8 0 35
h 9 0 35
h 10 0 35
h 11 0 35
h 12 0 35
h 13 5 40
答案 0 :(得分:1)
您可以尝试使用from_product
方法创建一个MultiIndex
,然后用它重新编制索引。然后使用groupby.cumsum
创建“ sum”列:
min_idx = np.arange(df['minute'].max() + 1)
m_idx = pd.MultiIndex.from_product([df['id'].unique(), min_idx], names=['id', 'minute'])
df_new = df.set_index(['id', 'minute']).reindex(m_idx, fill_value=0).reset_index()
df_new['sum'] = df_new.groupby('id')['value'].cumsum()
df_new
[出]
id minute value sum
0 a 0 10 10
1 a 1 10 20
2 a 2 0 20
3 a 3 0 20
4 a 4 0 20
5 a 5 10 30
6 a 6 0 30
7 a 7 0 30
8 a 8 0 30
9 a 9 0 30
10 a 10 0 30
11 a 11 0 30
12 a 12 0 30
13 a 13 0 30
14 h 0 0 0
15 h 1 0 0
16 h 2 15 15
17 h 3 20 35
18 h 4 0 35
19 h 5 0 35
20 h 6 0 35
21 h 7 0 35
22 h 8 0 35
23 h 9 0 35
24 h 10 0 35
25 h 11 0 35
26 h 12 0 35
27 h 13 5 40