【问题标题】:Iterate over rows in a data frame create a new column then adding more columns based on the new column迭代数据框中的行创建一个新列,然后根据新列添加更多列
【发布时间】:2019-09-23 14:15:54
【问题描述】:

我有一个如下的数据框:

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-04-25 行,Hour-1=100+(148-100)/24=102; Hour-2=Hour-1+(148-100)/24=102+2=104

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


【解决方案1】:

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]

【讨论】:

    【解决方案2】:

    如果我正确理解了这个问题。

    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']
    .
    .
    .
    .
    

    还有其他方法会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2019-08-05
      • 2020-04-27
      • 2017-01-03
      • 2023-02-20
      相关资源
      最近更新 更多