python和dataframe:按周分组并计算总和和差异

时间:2019-12-05 19:22:01

标签: python pandas dataframe

我有一个包含以下列的数据框:

      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

1 个答案:

答案 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。