![](/img/trans.png)
[英]pyspark - Updating a column based on a calculated value from another calculated column
[英]add column dynamically and assign calculated value from another column
我有一些预付销售订单,需要根据销售订单涵盖的月数(已付/月)将销售价值分配给后续月份。 dataframe 看起来像这样:
order number of months year start month start year paid
1 2 2021 10 2021 300
2 3 2021 10 2021 300
3 1 2021 11 2021 50
....它应该看起来像
order months year start_month start_year paid 2021_10 2021_11 2021_12
1 2 2021 10 2021 300 150 150
2 3 2021 10 2021 300 100 100 100
3 1 2021 11 2021 50 50
……
谢谢!
我假设您使用的是 pandas。
首先,您需要获得销售月份和年份的所有组合。 这取决于您的边缘情况和数据。 但为了这个例子:
date_combinations = [(10,2021), (11,2021), (12,2021)]
现在,动态添加列并根据多个其他行填充它们的方法是在整个数据帧上使用“应用”function 并获得如下行:
def fill_date_col(row):
if date[0] < row["start_month"] + row["months"] and date[0] >= row["start_month"] and row["start_year"] == date[1] :
return row["paid"]/row["months"]
else:
return None
for date in date_combinations:
df[f"{date[0]}_{date[1]}"] = df.apply(lambda row: fill_date_col(row), axis=1)
这就是结果
order months start_month start_year paid 10_2021 11_2021 12_2021
0 1 2 10 2021 300 150.0 150.0 NaN
1 2 3 10 2021 300 100.0 100.0 100.0
2 3 1 11 2021 50 NaN 50.0 NaN
当然,您需要根据日期跨度和边缘情况进行调整,特别是如果某些销售跨越一年。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.