我有一个包含以下列的数据框:
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
答案 0 :(得分:1)
我想我在这里有一个不同的语言环境(因此我的周不同),您可以这样做:
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。