DataFrame使用groupby时指定level

groupby方法中的传参既可以是by=列名,也可以是level=index的name或者int等级

可以根据不同层级的index完成分组groupby,然后如果另一个层级是时间索引,则还可以对该层级进行resample,例如以下的使用场景:

 

pandas 中,DataFrame 具有 MultiIndex 时,与 groupby 结合使用可以实现更复杂的分组和聚合操作。以下是一些常见的场景:

场景1:根据多级索引的某一层进行分组

假设我们有一个具有多级索引的 DataFrame,如下所示:
Python复制
import pandas as pd

# 创建一个具有多级索引的 DataFrame
data = {
    'value': [10, 20, 30, 40, 50, 60]
}
index = pd.MultiIndex.from_tuples(
    [('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y'), ('C', 'x'), ('C', 'y')],
    names=['level1', 'level2']
)
df = pd.DataFrame(data, index=index)
print(df)
输出:
复制
           value
level1 level2     
A      x         10
       y         20
B      x         30
       y         40
C      x         50
       y         60
根据 level1 这一层进行分组求和:
Python复制
sum_df = df.groupby(level='level1').sum()
print(sum_df)
输出:
复制
       value
level1      
A          30
B          70
C         110

场景2:根据多级索引的多层进行分组

根据 level1level2 进行分组求和:
Python复制
sum_df = df.groupby(level=['level1', 'level2']).sum()
print(sum_df)
输出:
复制
           value
level1 level2     
A      x         10
       y         20
B      x         30
       y         40
C      x         50
       y         60

场景3:根据多级索引的某一层进行分组,并对其他列进行聚合

假设我们有一个具有多级索引和多列的 DataFrame,如下所示:
Python复制
import pandas as pd

# 创建一个具有多级索引和多列的 DataFrame
data = {
    'value1': [10, 20, 30, 40, 50, 60],
    'value2': [100, 200, 300, 400, 500, 600]
}
index = pd.MultiIndex.from_tuples(
    [('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y'), ('C', 'x'), ('C', 'y')],
    names=['level1', 'level2']
)
df = pd.DataFrame(data, index=index)
print(df)
输出:
复制
           value1  value2
level1 level2            
A      x         10     100
       y         20     200
B      x         30     300
       y         40     400
C      x         50     500
       y         60     600
根据 level1 这一层进行分组,对 value1 求和,对 value2 求平均:
Python复制
agg_df = df.groupby(level='level1').agg({'value1': 'sum', 'value2': 'mean'})
print(agg_df)
输出:
复制
       value1  value2
level1            
A          30     150
B          70     350
C         110     550

总结

  • 使用 groupby 方法可以方便地根据多级索引中的一层或多个索引层进行分组。
  • 结合聚合函数(如 summean 等),可以对分组后的数据进行各种统计操作。
  • 如果需要对不同的列进行不同的聚合操作,可以使用 agg 方法。
根据你的具体需求,可以选择合适的方法进行分组和聚合。
posted @ 2025-02-21 11:43  FreeCheng  阅读(78)  评论(0)    收藏  举报