是否有 python 函数可以按特定时间增量移动收入列?
Is there a python function to shift revenue column by specific timedelta?
请参考附图
我有一个数据框,在列(2020 年到 2025 年)中包含年收入。我想按给定的时间增量(时间偏移列)转移这些列中的收入。我的时间增量是以天为单位的。有没有一种有效的方法来进行转换?
E.G
我想要实现的是将列中的年收入按时移列中的天数移动,即 4 天的收入从一列转移到另一列(即 1.27[116/365 * 4] 应该第一行从 2022 年转移到 2023 年)
提前致谢
文本输入数据
Launch Date Launch Date Base Time Shift 2020 2021 2022 2023 2024 2025
2022-06-01 2022-06-01 4 0 0 115.98 122.93 119.22 35.31
2025-02-01 2025-02-01 4 0 0 0 0 0 66.18859318
2022-09-01 2022-09-01 4 49.42 254.86 191.12 248.80 206.53 98.22
2025-01-01 2025-01-01 4 0 0 0 0 14.47 54.24
2022-06-01 2022-06-01 4 0 0 50.25 53.26 51.65 15.30
2025-02-01 2025-02-01 4 0 0 0 0 0 28.67
2022-09-01 2022-09-01 4 148.20 758.22 535.45 676.73 545.42 251.83
2025-01-01 2025-01-01 4 0 0 0 0 38.23 139.07
2022-06-01 2022-06-01 4 0 0 140.78 144.88 136.41 39.23
你可以计算出每年要移动多少,然后从当年减去并添加到下一年。
获取感兴趣的列名称
ycols = [str(n) for n in range(2020,2026)]
计算每年(到下一年)需要转移的金额:
shift_df = df[ycols].multiply(df['Time_Shift']/365.0, axis=0)
看起来像这样
2020 2021 2022 2023 2024 2025
-- -------- ------- -------- -------- -------- --------
0 0 0 1.27101 1.34718 1.30652 0.386959
1 0 0 0 0 0 0.725354
2 0.541589 2.79299 2.09447 2.72658 2.26334 1.07638
3 0 0 0 0 0.158575 0.594411
4 0 0 0.550685 0.583671 0.566027 0.167671
5 0 0 0 0 0 0.314192
6 1.62411 8.30926 5.86795 7.41622 5.97721 2.75978
7 0 0 0 0 0.418959 1.52405
8 0 0 1.54279 1.58773 1.4949 0.429918
现在创建 df 的副本(当然可以使用原始副本)并应用操作:
df2 = df.copy()
df2[ycols] = df2[ycols] - shift_df[ycols]
df2[ycols[1:]] =df2[ycols[1:]] + shift_df[ycols[:-1]].values
这里的最后一行有点棘手——我们使用索引 [1:]
和 [:-1]
适当地访问上一年的班次,并且还使用 .values
方法否则列标签不匹配,您可以添加。
之后我们得到 df2:
Launch_Date Launch_Date_Base Time_Shift 2020 2021 2022 2023 2024 2025
-- ------------- ------------------ ------------ -------- ------- -------- ------- -------- --------
0 2022-06-01 2022-06-01 4 0 0 114.709 122.854 119.261 36.2296
1 2025-02-01 2025-02-01 4 0 0 0 0 0 65.4632
2 2022-09-01 2022-09-01 4 48.8784 252.609 191.819 248.168 206.993 99.407
3 2025-01-01 2025-01-01 4 0 0 0 0 14.3114 53.8042
4 2022-06-01 2022-06-01 4 0 0 49.6993 53.227 51.6676 15.6984
5 2025-02-01 2025-02-01 4 0 0 0 0 0 28.3558
6 2022-09-01 2022-09-01 4 146.576 751.535 537.891 675.182 546.859 255.047
7 2025-01-01 2025-01-01 4 0 0 0 0 37.811 137.965
8 2022-06-01 2022-06-01 4 0 0 139.237 144.835 136.503 40.295
如您所见,从 2026 年开始转移的金额是 'lost',即我们不会将其分配给任何新列
请参考附图
我有一个数据框,在列(2020 年到 2025 年)中包含年收入。我想按给定的时间增量(时间偏移列)转移这些列中的收入。我的时间增量是以天为单位的。有没有一种有效的方法来进行转换?
E.G
我想要实现的是将列中的年收入按时移列中的天数移动,即 4 天的收入从一列转移到另一列(即 1.27[116/365 * 4] 应该第一行从 2022 年转移到 2023 年)
提前致谢
文本输入数据
Launch Date Launch Date Base Time Shift 2020 2021 2022 2023 2024 2025
2022-06-01 2022-06-01 4 0 0 115.98 122.93 119.22 35.31
2025-02-01 2025-02-01 4 0 0 0 0 0 66.18859318
2022-09-01 2022-09-01 4 49.42 254.86 191.12 248.80 206.53 98.22
2025-01-01 2025-01-01 4 0 0 0 0 14.47 54.24
2022-06-01 2022-06-01 4 0 0 50.25 53.26 51.65 15.30
2025-02-01 2025-02-01 4 0 0 0 0 0 28.67
2022-09-01 2022-09-01 4 148.20 758.22 535.45 676.73 545.42 251.83
2025-01-01 2025-01-01 4 0 0 0 0 38.23 139.07
2022-06-01 2022-06-01 4 0 0 140.78 144.88 136.41 39.23
你可以计算出每年要移动多少,然后从当年减去并添加到下一年。
获取感兴趣的列名称
ycols = [str(n) for n in range(2020,2026)]
计算每年(到下一年)需要转移的金额:
shift_df = df[ycols].multiply(df['Time_Shift']/365.0, axis=0)
看起来像这样
2020 2021 2022 2023 2024 2025
-- -------- ------- -------- -------- -------- --------
0 0 0 1.27101 1.34718 1.30652 0.386959
1 0 0 0 0 0 0.725354
2 0.541589 2.79299 2.09447 2.72658 2.26334 1.07638
3 0 0 0 0 0.158575 0.594411
4 0 0 0.550685 0.583671 0.566027 0.167671
5 0 0 0 0 0 0.314192
6 1.62411 8.30926 5.86795 7.41622 5.97721 2.75978
7 0 0 0 0 0.418959 1.52405
8 0 0 1.54279 1.58773 1.4949 0.429918
现在创建 df 的副本(当然可以使用原始副本)并应用操作:
df2 = df.copy()
df2[ycols] = df2[ycols] - shift_df[ycols]
df2[ycols[1:]] =df2[ycols[1:]] + shift_df[ycols[:-1]].values
这里的最后一行有点棘手——我们使用索引 [1:]
和 [:-1]
适当地访问上一年的班次,并且还使用 .values
方法否则列标签不匹配,您可以添加。
之后我们得到 df2:
Launch_Date Launch_Date_Base Time_Shift 2020 2021 2022 2023 2024 2025
-- ------------- ------------------ ------------ -------- ------- -------- ------- -------- --------
0 2022-06-01 2022-06-01 4 0 0 114.709 122.854 119.261 36.2296
1 2025-02-01 2025-02-01 4 0 0 0 0 0 65.4632
2 2022-09-01 2022-09-01 4 48.8784 252.609 191.819 248.168 206.993 99.407
3 2025-01-01 2025-01-01 4 0 0 0 0 14.3114 53.8042
4 2022-06-01 2022-06-01 4 0 0 49.6993 53.227 51.6676 15.6984
5 2025-02-01 2025-02-01 4 0 0 0 0 0 28.3558
6 2022-09-01 2022-09-01 4 146.576 751.535 537.891 675.182 546.859 255.047
7 2025-01-01 2025-01-01 4 0 0 0 0 37.811 137.965
8 2022-06-01 2022-06-01 4 0 0 139.237 144.835 136.503 40.295
如您所见,从 2026 年开始转移的金额是 'lost',即我们不会将其分配给任何新列