Python 熊猫在2个给定数字、给定步长和groupby内插值

Python 熊猫在2个给定数字、给定步长和groupby内插值,python,pandas,interpolation,pandas-groupby,Python,Pandas,Interpolation,Pandas Groupby,这是一个很难回答的问题,因为我可以找到每一个问题是如何单独完成的,但我想把它们放在一起,特别是由小组应用。目标是使用2个值作为范围,并在给定间隔的情况下在它们之间插值。接下来,我想要一个包含运行求和的列(不过,我对它很熟悉,在groupby中我不了解插值函数) 如上所述,我从一个基本的开始,它工作得非常完美,即: df = pd.DataFrame({'minute':[1,3,4,5,8],'value':[1,4,7,10,13]}) max_value = df['minute'].max

这是一个很难回答的问题,因为我可以找到每一个问题是如何单独完成的,但我想把它们放在一起,特别是由小组应用。目标是使用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

因此,考虑到这个数据框架:

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为该列中的max值,并在value列中输入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

您可以尝试使用该方法创建一个
多索引
,然后使用它重新编制索引。然后使用
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,从而创建一个非唯一的多索引。我对上面的数据框进行了快速编辑以显示它。但是,由于我最初没有它,我接受这个答案,因为这是我的错误/失误,并且这个解决方案在OP中确实有效。Yeh可能只需要在转换之前重复删除原始数据帧。例如,
df.drop_duplicates(subset=['id','minute'],inplace=True)
?是的,但是如果我删除了重复项,那么它会删除重复项的值,我需要将这些值组合起来,这样这些值的总和就是一行。我现在正在做这件事。我只是好奇你是不是从头顶上就知道了。啊,我明白了,在这种情况下,可能是
df=df.groupby(['id','minute']).sum().reset_index()
首先?是的,我在读这篇文章之前就这么做了。完美的谢谢你在这方面的额外帮助。我知道,在最初的解决方案之后,海报会窥探更多的帮助,这可能会很烦人,因此非常感谢扩展的帮助
   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