所以我有一個代碼,如果“Date_Numerical”低於 30.5(每月平均天數),我需要在其中創建每一行的副本。我想要的是將“Date_Numerical”減去 30,直到“SCU_KEY”的列值低於 30.5。這是我用來創建一個副本和一個示例數據幀的代碼,但不會超過一個:
def func(row):
if row['Date_Numerical'] > 30:
row2 = row.copy()
return pd.concat([row, row2], axis=1)
return row
df_2 = pd.concat([func(row) for _, row in df.iterrows()], ignore_index=True, axis=1).T
Original output:
df = pd.DataFrame({'SCU_KEY': [3, 4, 5, 6],
'Date_Numerical': [70, 20, 15, 110]})
Desired Output:
df_2 = pd.DataFrame({'SCU_KEY': [3, 3, 3, 4, 5, 6, 6, 6, 6],
'Date_Numerical': [70, 40, 10, 20, 15, 110, 80, 50, 20]})
嘗試使用apply
和explode
:
df["Date_Numerical"] = df["Date_Numerical"].apply(lambda x: list(range(x, 0, -30)))
df = df.explode("Date_Numerical").reset_index(drop=True)
>>> df
SCU_KEY Date_Numerical
0 3 70
1 3 40
2 3 10
3 4 20
4 5 15
5 6 110
6 6 80
7 6 50
8 6 20
如果你想要 30.5 的差異,你可以使用:
df["Date_Numerical"] = df["Date_Numerical"].apply(lambda x: [i/10 for i in range(x*10, 0, -305)])
df = df.explode("Date_Numerical").reset_index(drop=True)
>>> df
SCU_KEY Date_Numerical
0 3 70.0
1 3 39.5
2 3 9.0
3 4 20.0
4 5 15.0
5 6 110.0
6 6 79.5
7 6 49.0
8 6 18.5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句