Итерируйте по строкам во фрейме данных, создайте новый столбец, затем добавьте больше столбцов на основе нового столбца. - PullRequest
1 голос
/ 06 мая 2019

У меня есть фрейм данных, как показано ниже:

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 ]

2 голосов
/ 06 мая 2019

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]
0 голосов
/ 06 мая 2019

Если я правильно понял вопрос.

для петлевого подхода:

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

Существуют и другие подходы, которые будут работать лучше.

...