我有一个 pd.DataFrame df,以 MultiIndex 作为索引。当我按第一级分组时,如何获取 MultiIndex 的第二级作为索引? groupby 对象是
gdf = df.groupby(level=['first_level])
.
我想通过一个接受 pd.DataFrame 并输出 pd.Series 的函数进行转换。输入应该是 pd.DataFrames,索引是原始 MultiIndex 的第二级,输出应该是原始 MultiIndex 的第一级索引。
您可以使用
get_group()
获取它并重置first_level索引
示例代码:
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(带应用):
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