提问人:user242318 提问时间:11/13/2023 最后编辑:user242318 更新时间:11/13/2023 访问量:58
按第一级分组时如何访问索引的第二级
How do I access the second level of an index when grouping by the first level
问:
我有一个PD。以 MultiIndex 作为索引的 DataFrame df。当我按第一级分组时,如何获得第二级 MultiIndex 作为索引?groupby 对象是
gdf = df.groupby(level=['first_level])
.
我想通过一个接受 pd 的函数进行转换。DataFrame 并输出一个 pd。系列。输入应该是 pd。索引为原始 MultiIndex 的第二级的 DataFrames,而 Ouput 应该由原始 MultiIndex 的第一级索引索引。
答:
1赞
Ömer Sezer
11/13/2023
#1
您可以使用并重置first_level索引来获取它get_group()
示例代码:
import pandas as pd
arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
index = pd.MultiIndex.from_arrays(arrays, names=('first_level', 'second_level'))
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=index)
print(df)
gdf = df.groupby(level='first_level')
gr_A = gdf.get_group('A') # access first_level 'A'
gr_A = gr_A.reset_index(level='first_level', drop=True) # reset first_level index
print(gr_A)
艺术
gdf = df.groupby(level='first_level')
gr_A = gdf.get_group('A').droplevel('first_level')
print(gr_A)
输出:
value
first_level second_level
A 1 10
2 20
B 1 30
2 40
value
second_level
1 10
2 20
编辑:
您可以获得一个系列并应用/转换任何过程:
示例 1(使用 apply):
result_series_A = df[df.index.get_level_values('first_level') == 'A']['value'].apply(lambda x: x * 2)
#result_series_A = df[df.index.get_level_values('first_level') == 'A']['value'] # with reset_index, get the data as series
result_series_A = result_series_A.reset_index(drop=True)
print(result_series_A)
示例 2(使用转换):
df['transformed_value'] = df.groupby(level='first_level')['value'].transform(lambda x: x * 2)
result_series_A = df[df.index.get_level_values('first_level') == 'A']['transformed_value']
result_series_A = result_series_A.reset_index(drop=True)
print(result_series_A)
输出:
value
first_level second_level
A 1 10
2 20
B 1 30
2 40
0 20
1 40
评论
0赞
user242318
11/13/2023
谢谢!如果我想通过一个函数进行转换,该函数接受由第二级索引的 DataFrames 并输出 Series,该怎么办?我正在考虑 gdf.transform(func),输出一个由第一级索引的 DataFrame。
0赞
Ömer Sezer
11/13/2023
@user242318是的,我更新了帖子(在编辑部分之后)。你可以和DF一起玩。我提出了一些可能性。
评论
groupby