熊猫数据框按 ID 和日期聚合

panda dataframe aggregate by ID and date

我正在尝试按 ID 和日期聚合数据框。假设我有一个数据框:

  Publish date  ID  Price
0   2000-01-02   0     10
1   2000-01-03   0     20
2   2000-02-17   0     30
3   2000-01-04   1     40

我想按 ID 和日期(频率 = 1W)汇总值并获得如下数据框:

  Publish date  ID  Price
0   2000-01-02   0     30
1   2000-02-17   0     30
2   2000-01-04   1     40

我理解可以通过迭代ID并使用grouper聚合价格来实现。有没有更有效的方法而不迭代 ID?非常感谢。

Grouper 与聚合 sum 一起使用,但不确定 Grouper 的频率(因为所有看起来都与问题不同):

df['Publish date'] = pd.to_datetime(df['Publish date'])

df = (df.groupby([pd.Grouper(freq='W', key='Publish date'),'ID'], sort=False)['Price']
        .sum()
        .reset_index())
print (df)
  Publish date  ID  Price
0   2000-01-02   0     10
1   2000-01-09   0     20
2   2000-02-20   0     30
3   2000-01-09   1     40

df['Publish date'] = pd.to_datetime(df['Publish date'])

df = (df.groupby([pd.Grouper(freq='W-Mon', key='Publish date'),'ID'], sort=False)['Price']
        .sum()
        .reset_index())
print (df)
  Publish date  ID  Price
0   2000-01-03   0     30
1   2000-02-21   0     30
2   2000-01-10   1     40

或者:

df['Publish date'] = pd.to_datetime(df['Publish date'])

df = (df.groupby([pd.Grouper(freq='7D', key='Publish date'),'ID'], sort=False)['Price']
        .sum()
        .reset_index())
print (df)
  Publish date  ID  Price
0   2000-01-02   0     30
1   2000-02-13   0     30
2   2000-01-02   1     40