2017-07-27 119 views
1

我有例如分配基于另一列中的数据帧的列

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 

以下数据帧对于每个大学组,我想计算千伏的平均值,为毫秒之后的下一个可用的日期= 1所以对于A上述情况下,毫秒= 1的11/01和11/03 11/05及所以输出应该是

univ kv 
    A 0.2 (average of 0.3 and 0.1) 

我也想使“下一个可用日期”灵活的是它可能是“第二个下一个或第三个下一个可用日期”

非常感谢!

+1

瞎搞你有你的榜样是否正确?看起来你希望平均使用'.4'和'.1' – piRSquared

回答

1

IIUC:

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 

In [246]: n=2 

In [247]: df.groupby('univ') \ 
      .apply(lambda x: x.loc[x.ms.shift(n)==1, 'kv'].mean()) \ 
      .reset_index(name='kv') 
Out[247]: 
    univ kv 
0 A 0.4 
1 B NaN 
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 
相关问题