Функция Python Apply для создания новых строк в циклеPython

Программы на Python
Anonymous
Функция Python Apply для создания новых строк в цикле

Сообщение Anonymous »

Цель. Вот пример набора данных с "ID", "PHASENAME", "CDAYS", "MULTI_FACTOR", "DAY_COUNTER" и "DAILY_LABOR_PERCENT". Цель состоит в том, чтобы взять каждый «ID», «PHASENAME», «CDAYS» и увеличить «DAY_COUNTER» по сравнению с последним днем, увеличив его до 100 дней. Я также должен повторить это для «DAILY_LABOR_PERCENT».
на данный момент



ID
PHASENAME
C_DAYS< /th>
Multi_Factor
DAY_COUNTER
DAILY_LABOR_%




BAR
C
14,0
7,142857
1
1,0


БАР
C
14,0
7.142857
2
5.0


BAR
C
14,0
7,142857
13
4.0


БАР
C
14,0
7,142857
14
0,0< /td>



должно быть



Идентификатор
PHASENAME
C_DAYS
Multi_Factor
DAY_COUNTER
DAILY_LABOR_%




БАР
C
14,0
7,142857
1.14


БАР
C
14,0
7,142857
2
некоторое количество


БАР
C
14,0
7.142857
99
некоторое число


БАР
C
14,0
7,142857
100
0,0


< /div>
В этом примере набора данных этот человек проработал 14 дней, и процент его труда записывается для каждого дня. Вместо 14 дней родов я хочу иметь 100 дней родов (формулы: «DAY_COUNTER» * «Multi_Factor» и «DAILY_LABOR_PERCENT» / «Multi_Factor»).
Кроме того, я' Я беспокоюсь, что как только я увеличу этот набор данных, диапазон 100 не будет работать.
Ищу
  • Труд повторяет. Поэтому, когда я применяю свою логику, я не получаю истинного процента трудозатрат.
  • Предложения о том, как подойти к этому с более крупным набором данных.
код
import pandas as pd
import numpy as np

data={
"ID": [ "BAR","BAR","BAR","BAR","BAR","BAR","BAR","BAR","BAR","BAR","BAR","BAR","BAR","BAR"],
"PHASENAME": [ "C","C","C","C","C","C","C","C","C","C","C","C","C","C"],
"C_DAYS": [ 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0],
"Multi_Factor": [7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857, 7.142857],
"DAY_COUNTER": [1,2,3,4,5,6,7,8,9,10,11,12,13,14],
"DAILY_LABOR_PERCENT": [1.0,5.0,9.0,11.0,10.0,9.0,9.0,9.0,8.0,10.0,8.0,7.0,4.0,0.0],
}

df=pd.DataFrame(data)
df1=df.copy()

n = 100
first_day = df["DAY_COUNTER"].iloc[0]

rep = np.tile(df.values, (n // len(df) + 1, 1))
out = pd.DataFrame(rep, columns=df.columns).iloc[:n]

out["DAY_COUNTER"] = range(first_day, n + first_day)

def labor_factor(row):
return row['DAILY_LABOR_PERCENT'] / row['Multi_Factor']

#creating empty list to store rows for each id, phasename, and cdays
new_rows= []

#iterating through each index range and applying function to get day_counter to 100

for i in range(len(out)):
out['new_labor']= out.apply(labor_factor,axis=1)



Подробнее здесь: https://stackoverflow.com/questions/787 ... ws-in-loop

Вернуться в «Python»