我的数据框为:
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方式做到这一点?
答案 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