2017-07-27 137 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 
相關問題