我有一个包含以下列的数据框:
DATE ALFA BETA
2016-04-26 1 3
2016-04-27 3 0
2016-04-28 0 8
2016-04-29 4 2
2016-04-30 3 1
2016-05-01 -2 -5
2016-05-02 3 0
2016-05-03 3 3
2016-05-08 1 7
2016-05-11 3 1
2016-05-12 10 1
2016-05-13 4 2
我想按周范围对数据进行分组,但以不同方式对待 alpha 和 beta 列。我想计算每周 ALFA
列中的数字总和,而对于 BETA
列,我想计算开始和结束之间的差异星期。我向您展示了预期结果的示例。
DATE sum_ALFA diff_BETA
2016-04-26 12 3
2016-05-03 4 4
2016-05-11 17 1
我已经尝试过这段代码,但它计算每列的总和
df = df.resample('W', on='DATE').sum().reset_index().sort_values(by='DATE')
这是我的数据集 https://drive.google.com/uc?export=download&id=1fEqjINx9R5io7t_YxA9qShvNDxWRCUke
最佳答案
我猜我这里有不同的区域设置(因此我的一周不同),你可以这样做:
df.resample("W", on="DATE",closed="left", label="left"
).agg({"ALFA":"sum", "BETA": lambda g: g.iloc[0] - g.iloc[-1]})
ALFA BETA
DATE
2016-04-24 11 2
2016-05-01 4 -8
2016-05-08 18 5
我认为通过我的方法可以解决您的数据问题。定义
def get_series_first_minus_last(s):
try:
return s.iloc[0] - s.iloc[-1]
except IndexError:
return 0
并用函数调用替换 lambda 调用,即
df.resample("W", on="DATE",closed="left", label="left"
).agg({"ALFA":"sum", "BETA": get_series_first_minus_last})
请注意,在新定义的函数中,如果您愿意,也可以返回 nan。
关于python和数据帧: group by week and calculate the sum and difference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59201990/