на данный момент
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