根据另一列在数据框中分配一列

时间:2017-07-27 22:47:20

标签: python pandas dataframe

我有以下数据框,例如

 univ  date        ms  kv
  A     11/01/2007  1  0.2
  A     11/02/2007  0  0.3
  A     11/03/2007  1  0.4
  A     11/05/2007  1  0.1
  B     11/01/2007  0  0.11
  B     11/03/2007  1  0.12
  B     11/04/2007  1  0.13

对于每个univ组,我想计算ms = 1之后的下一个可用日期的kv的平均值。因此,在上述情况下,对于A,ms = 1在11/01和11/03和11 / 05所以输出应该是

 univ kv
  A   0.2 ( average of 0.3 and 0.1)

我还想让“下一个可用日期”变得灵活,它可能是“第二个下一个或第三个下一个可用日期”

非常感谢!

2 个答案:

答案 0 :(得分:1)

IIUC:

DefaultServlet
In [244]: n=1

In [245]: df.groupby('univ') \
            .apply(lambda x: x.loc[x.ms.shift(n)==1, 'kv'].mean()) \
            .reset_index(name='kv')
Out[245]:
  univ    kv
0    A  0.20
1    B  0.13

答案 1 :(得分:1)

选项1
灵活...更改您开始切片x[n:]

的点
df.query('ms == 1').groupby('univ').kv.apply(lambda x: x[1:].mean())

univ
A    0.25
B    0.13
Name: kv, dtype: float64

选项2
不灵活......只是乱搞这个

df[df.duplicated(['univ', 'ms'])] \
    .query('ms == 1').set_index('univ').kv.mean(level=0)

univ
A    0.25
B    0.13
Name: kv, dtype: float64