如何在数据框中找到条件滚动均值?

时间:2019-02-21 11:20:15

标签: python database

我的数据框为:

st      ft  value
10      12       10
9       13       20
8       9        30
7       8        40
6       7        50
5       8        60
4       5        70
3       4        80
2       4        90
1       2       100

用于创建以上DataFrame的代码:

df = pd.DataFrame([[10,9,8,8,7,6,5,4,4,2,1],[12,13,9,8,7,8,5,4,4 ,2],               [10,20,30,40,50,60,70,80,90,100]])。T.rename(columns = {0:“ st”,1:“ ft”,2:“ value”})

在dataFrame中,有三列st(即实验开始时间),ft(实验完成时间)和value(观测值)。完成时间>开始时间。我想创建一个具有先前观察值的新列。但是取最后一个观测值的条件是- 完成时间(最后一行)<=开始时间(当前行),以使完成时间最大。

应用上述逻辑,输出应类似于-

st        ft    value   last_observed_value
10        12    10         30.0
9         13    20         30.0
8         9     30         40.0
7         8     40         50.0
6         7     50         70.0
5         8     60         70.0
4         5     70         80.0
3         4     80        100.0
2         4     90        100.0
1         2     100       None

我们如何用Python方式做到这一点?

1 个答案:

答案 0 :(得分:0)

df = pd.DataFrame([[10, 9, 8, 7, 6, 5, 4, 3, 2, 1], [12, 13, 9, 8, 7, 8, 5, 4,4,2], [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]]).T.rename(columns={0:"st", 1:"ft", 2:"value"})

df['last_observed_value'] =  -10000
for i in range(df.st.size - 1):
    for j in range(i,df.st.size - 1):
        if(df.st[j]< df.ft[j+1]):
            df['last_observed_value'][i] =  df.value[j+1]
        if(df.st[j] == df.ft[j+1]):
            df['last_observed_value'][i] =  df.value[j+1]
            break