【发布时间】:2015-08-17 05:10:59
【问题描述】:
我有一个多级数据框df。作为列,我有不同的“对象”
我分析。作为行索引,我有一个案例 ID lc,和时间 t。
对于每种情况,我需要找到lc 的时间t(最好是插值,但是
最接近的值就足够了)每个对象都达到了目标值。
这个目标值是给定对象在时间t==0的函数。
import pandas as pd
print(pd.__version__)
0.16.2
虚拟数据集示例:
data = {1: {(1014, 0.0): 20.25,
(1014, 0.0991): 19.08,
(1014, 0.1991): 18.43,
(1014, 0.2991): 19.03,
(1014, 0.3991): 18.71,
(1015, 0.0): 20.22,
(1015, 0.0991): 19.3,
(1015, 0.1991): 18.68,
(1015, 0.2991): 18.22,
(1015, 0.3991): 17.84,
(1016, 0.0): 21.75,
(1016, 0.0991): 19.97,
(1016, 0.1991): 19.65,
(1016, 0.2991): 19.29,
(1016, 0.3991): 18.94
},
2: {(1014, 0.0): 29.11,
(1014, 0.0991): 28.68,
(1014, 0.1991): 28.27,
(1014, 0.2991): 27.46,
(1014, 0.3991): 26.96,
(1015, 0.0): 29.22,
(1015, 0.0991): 28.64,
(1015, 0.1991): 28.18,
(1015, 0.2991): 27.74,
(1015, 0.3991): 27.25,
(1016, 0.0): 29.17,
(1016, 0.0991): 28.68,
(1016, 0.1991): 28.17,
(1016, 0.2991): 27.68,
(1016, 0.3991): 27.18
},
3: {(1014, 0.0): 22.01,
(1014, 0.0991): 21.5,
(1014, 0.1991): 21.18,
(1014, 0.2991): 20.58,
(1014, 0.3991): 20.21,
(1015, 0.0): 21.81,
(1015, 0.0991): 21.46,
(1015, 0.1991): 21.11,
(1015, 0.2991): 20.78,
(1015, 0.3991): 20.42,
(1016, 0.0): 21.82,
(1016, 0.0991): 21.49,
(1016, 0.1991): 21.11,
(1016, 0.2991): 20.75,
(1016, 0.3991): 20.37
}}
df = pd.DataFrame(data).sort()
df.index.names=['case', 't']
Dataframe 看起来像这样:
1 2 3
case t
1014 0.0000 20.25 29.11 22.01
0.0991 19.08 28.68 21.50
0.1991 18.43 28.27 21.18
0.2991 19.03 27.46 20.58
0.3991 18.71 26.96 20.21
1015 0.0000 20.22 29.22 21.81
0.0991 19.30 28.64 21.46
0.1991 18.68 28.18 21.11
0.2991 18.22 27.74 20.78
0.3991 17.84 27.25 20.42
1016 0.0000 21.75 29.17 21.82
0.0991 19.97 28.68 21.49
0.1991 19.65 28.17 21.11
0.2991 19.29 27.68 20.75
0.3991 18.94 27.18 20.37
目标值是时间t==0 的值的函数。
通常,这将是半场期间的 k=0.5。对于当前样本,我们将取 k=0.926
由于值已排序,因此可以为每种情况取第一行。
targets = df.groupby(level='case').first() * 0.926
print(targets)
1 2 3
case
1014 18.75150 26.95586 20.38126
1015 18.72372 27.05772 20.19606
1016 20.14050 27.01142 20.20532
现在,我怎样才能简单地构建以下数据框,它显示
t 每个对象达到上面计算的目标值的时间?
1 2 3
case
1014 0.3991 0.3991 0.2991
1015 0.1991 0.3991 0.3991
1016 0.0991 0.3991 0.3991
【问题讨论】:
-
看起来数据集是排序的,总是这样?
-
是的,可以假设数据集已经排序