【发布时间】:2022-01-24 23:54:21
【问题描述】:
我有两个数据框 df1 和 df2,我想根据 df1 中的条件将值从 df2 调整为 df1。条件基于4个不同的列和不同ID的不同条件 在 df1 中,我需要将 df2 中的一列的值以这样一种方式放置,即它从 df2 中拆分值并在 df1 中调整它,并且每个 IDs 值的总和应该在两个数据帧中匹配。
所以我有以下格式的数据:
我想将 df2 中的值带到 df1 并根据 df1 本身中的 Start Day End Day、Start Time 和 End Time 拆分它,并且每个 ID 的 df1 和 df2 中的总和应该相等。
这是在 pandas 中创建的相同数据框。这两个表是输入值,我想要上面的预期结果。
df1 = pd.DataFrame({'ID': ["Ch1","Ch1","Ch1","Ch1","Ch1","Ch1","Ch2","Ch2","Ch2"],
'Start Day': [1,1,1,6,6,6,1,1,1],
'End Day': [5,5,5,7,7,7,7,7,7],
'Start Time': [600,1200,1700,600,1200,1700,700,1200,1700],
'End Time': [1200,1700,2500,1200,1700,2500,1200,1700,2400]})
print(df1)
df2 = pd.DataFrame({'ID': ["Ch1","Ch1","Ch1","Ch2","Ch2","Ch2","Ch2","Ch2","Ch2","Ch2","Ch2","Ch2","Ch2","Ch2"],
'Start Day': [1,1,1,1,1,1,1,1,1,1,1,1,6,1],
'End Day': [7,7,7,5,5,5,5,5,5,5,5,5,7,7],
'Start Time': [600,1200,1700,800,900,1000,1100,1200,1300,1900,2000,2200,700,700],
'End Time': [1200,1700,2500,900,1000,1100,1200,1300,1400,2000,2200,2300,2400,2400],
'Values':[1125,2250,1125,346.5,346.5,346.5,346.5,346.5,346.5,189,189,346.5,1795.5,346.5]})
print(df2)
谁能帮帮我。
计算:
从 df2 到 df1 说在 df2 我在第 1 天到第 7 天有值 1125,在 ch1 有 600 到 1200 的时间段我想在 df1 中将该值拆分为第 1 天到第 5 天和第 6 天到第 7 天,所以放值 1125 在 5 到 7 天,在同一时间段内,我将值除以 7 并将其乘以 5,并且由于时间段相同,即两个数据帧中的 600 到 1200,我将不再进一步划分并保留该值(1125/7*5) 或 (1125/df2(End Day- Start Day+1)*df1(End Day- Start Day+1)) 转换为 df1,其中 Start Day 和 End day 分别为 1 到 5,时间段为600 到 1200,该值将是 1125 中的 803.6,
同样,对于 df1 中的第 6 天到第 7 天,我们将以相同的方式拆分 df2 的值,从 df2 值列中我们将进行以下计算: (1125/7*2) 或 (1125/df2(End Day- Start Day+1)*df1(End Day- Start Day+1)) 转换为 df1,其中 Start Day 和 End day 分别为 6 到 7,时间段为600 到 1200,该值将是 1125 中的 321.4。
如果 df1 中的 Timeband 发生变化,我们将在 Values 中添加计算, 在 df1 中说,我希望开始日和结束日为 1 到 5,时间段为 700 到 1100,然后我将按以下方式将 df2 到 df1 的值:
(1125/7*5)*6/4 or (1125/df2(End Day-Start Day+1)*df1(End Day-Start Day+1))*df2(End Time-Start Time)/ df1(结束时间-开始时间)
另外,如果从 df2 开始,我们有开始日结束日 1 到 7,开始时间和结束时间 600 到 1200 为 1125,而在 df1 中,我们有开始日和结束日期 1 到 5,开始时间只有 700 到 1100,没有任何行中的其他日期带或时间带,然后在这种情况下将整个 1125 值保留到 df1 本身的该行中。
请帮我处理这段代码和逻辑,我会非常满意。 提前致谢。
【问题讨论】:
-
你能分享一下预期输出的例子吗?
-
嗨 @TomerS 分享了预期的输出
-
我不明白预期输出中值的计算
标签: python pandas dataframe split logic