我编写了一个代码,该代码在单元格上比较2个数据帧,并根据结果为第三个数据帧中的每个单元格分配特定的值。前两个的索引是逐月的,后者是日常的。问题是,我的代码更改了日期并开始写,例如从一个月的第二天或第三天开始。
以下是文件:
[1]问题_1:https://drive.google.com/file/d/1Oo_E0DhVeSfwcNlwUIyDSWlkwge1BhxP/view?usp=sharing
[2]问题_2: https://drive.google.com/file/d/1hwgjokdntyvJKmbY9sGch4XWHJ4oJDq4/view?usp=sharing
[3]问题3: https://drive.google.com/file/d/1InyyM750EEEYuUZLtC9cY4WjUFz-W1dc/view?usp=sharing
我尝试遍历不同的范围,也尝试偏移上个月的天数。我评论了特定的代码,现在只分配了(天,月)对来进行调试。
day_group = Q_3.groupby(by=[Q_3.index.month,Q_3.index.year]).count()
Q_new = pd.DataFrame(columns=Q_3.columns, index=Q_3.index)
Q_diff = Q_1.subtract(Q_2, axis='columns', level=None, fill_value=None)
for i, item in enumerate(Q_2.columns):
if item not in Q_1.columns:
continue
for j in range(0, len(Q_2.index)):
delta = Q_diff.iloc[j, i]
num_days_len = day_group.loc[Q_2.index[j].month, Q_month.index[j].year][item] #the amount of days in the corresponding month
# num_days_prev = day_group.loc[Q_2.index[j - 1].month, Q_month.index[j].year][item]
for k in range(0, num_days_len):
if delta == 0:
Q_new.iloc[k+j*num_days_len, i] = k, j # 0
if delta > 0:
Q_new.iloc[k+j*num_days_len, i] = k, j # Q_3.iloc[k+j*(num_days_len), i] + abs(delta)/num_days_len
elif delta < 0:
Q_new.iloc[k+j*num_days_len, i] = k, j # Q_3.iloc[k+j*(num_days_len), i] - abs(delta)/num_days_len
我希望代码能够正确地写入相应单元格中的第一个和最后一个值(以及它们之间的所有内容)。
我现在有:
2013-05-30 00:00:00 (27, 2) (27, 2) (27, 2) (27, 2)
2013-07-04 00:00:00 (0, 4) (0, 4) (0, 4) (0, 4)
我需要:
2013-05-30 00:00:00 (29, 2) (29, 2) (29, 2) (29, 2)
2013-07-04 00:00:00 (4, 4) (4, 4) (4, 4) (4, 4)
请帮我找出错误。