我有一个数据框,如下:
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)我做了一些研究,但我还没有发现如何迭代地创建像上面这样的列。我希望你能帮助我。提前谢谢你。
发布于 2019-05-06 07:00:33
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]发布于 2019-05-06 06:28:37
如果我没弄错问题的话。
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']
.
.
.
.还有其他方法会工作得更好。
https://stackoverflow.com/questions/55996813
复制相似问题