DataFrame使用groupby时指定level
groupby方法中的传参既可以是by=列名,也可以是level=index的name或者int等级。
可以根据不同层级的index完成分组groupby,然后如果另一个层级是时间索引,则还可以对该层级进行resample,例如以下的使用场景:

在
pandas 中,DataFrame 具有 MultiIndex 时,与 groupby 结合使用可以实现更复杂的分组和聚合操作。以下是一些常见的场景:场景1:根据多级索引的某一层进行分组
假设我们有一个具有多级索引的
DataFrame,如下所示: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 这一层进行分组求和:sum_df = df.groupby(level='level1').sum()
print(sum_df)
输出:
value
level1
A 30
B 70
C 110
场景2:根据多级索引的多层进行分组
根据
level1 和 level2 进行分组求和: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,如下所示: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 求平均: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方法可以方便地根据多级索引中的一层或多个索引层进行分组。 -
结合聚合函数(如
sum、mean等),可以对分组后的数据进行各种统计操作。 -
如果需要对不同的列进行不同的聚合操作,可以使用
agg方法。
根据你的具体需求,可以选择合适的方法进行分组和聚合。

浙公网安备 33010602011771号