遍历数据框中的行创建一个新列,然后基于该新列添加更多列

时间:2019-05-05 22:06:22

标签: python-3.x pandas loops dataframe for-loop

我的数据框如下:

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)

我做了一些研究,但是还没有找到如何像上面那样反复创建列。我希望你能帮助我。预先谢谢你。

2 个答案:

答案 0 :(得分:2)

IIUC使用resampleinterpolate,然后我们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']
.
.
.
.

还有其他一些方法会更好地工作。