我的数据框如下:
Date Quantity
2019-04-25 100
2019-04-26 148
2019-04-27 124
我需要的输出是获取两个下一个日期之间的数量差异,并在24小时内求平均值,然后创建23列,其中每小时数量差异添加到该列之前,如下所示:
Date Quantity Hour-1 Hour-2 ....Hour-23
2019-04-25 100 102 104 .... 146
2019-04-26 148 147 146 .... 123
2019-04-27 124
我正在尝试遍历一个循环,但是它不起作用,我的代码如下:
for i in df.index:
diff=(df.get_value(i+1,'Quantity')-df.get_value(i,'Quantity'))/24
for j in range(24):
df[i,[1+j]]=df.[i,[j]]*(1+diff)
我做了一些研究,但是还没有找到如何像上面那样反复创建列。我希望你能帮助我。预先谢谢你。
答案 0 :(得分:2)
IIUC使用resample
和interpolate
,然后我们pivot
输出
s=df.set_index('Date').resample('1 H').interpolate()
s=pd.pivot_table(s,index=s.index.date,columns=s.groupby(s.index.date).cumcount(),values=s,aggfunc='mean')
s.columns=s.columns.droplevel(0)
s
Out[93]:
0 1 2 3 ... 20 21 22 23
2019-04-25 100.0 102.0 104.0 106.0 ... 140.0 142.0 144.0 146.0
2019-04-26 148.0 147.0 146.0 145.0 ... 128.0 127.0 126.0 125.0
2019-04-27 124.0 NaN NaN NaN ... NaN NaN NaN NaN
[3 rows x 24 columns]
答案 1 :(得分:0)
如果我正确理解了这个问题。
for循环方法:
list_of_values = []
for i,row in df.iterrows():
if i < len(df) - 2:
qty = row['Quantity']
qty_2 = df.at[i+1,'Quantity']
diff = (qty_2 - qty)/24
list_of_values.append(diff)
else:
list_of_values.append(0)
df['diff'] = list_of_values
输出:
Date Quantity diff
2019-04-25 100 2
2019-04-26 148 -1
2019-04-27 124 0
现在创建所需的列。
即
df['Hour-1'] = df['Quantity'] + df['diff']
df['Hour-2'] = df['Quantity'] + 2*df['diff']
.
.
.
.
还有其他一些方法会更好地工作。