繁体   English   中英

动态添加列并从另一列分配计算值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM