繁体   English   中英

在多索引数据帧中,groupby之后的.columns.levels [1]给出整个数据帧的列

[英]In a multi-indexed dataframe .columns.levels[1] after groupby gives the columns of the whole dataframe

可以说我有三个数据帧,这些数据帧是在多索引的帮助下水平连接的:

df1 = pd.DataFrame(data=np.random.randint(0, 100, (4, 5)), columns=list('ABCDE'))
df2 = pd.DataFrame(data=np.random.randint(0, 100, (4, 5)),columns=list('AGHIJ'))
df3 = pd.DataFrame(data=np.random.randint(0, 100, (4, 5)),columns=list('ALMNP'))
dfs = []
dfs.append(df1)
dfs.append(df2)
dfs.append(df3)
result = pd.concat(dfs, axis=1, keys=range(len(dfs)))

如果我按第一个索引分组,我应该得到我的第一个数据帧,如果我查看它的列列表,则应该是ABCD,但事实并非如此。

print(result.groupby(axis=1, level=0).get_group(0).columns.levels[1])

给我df1,df2和df3的所有列

我将使用get_level_values ,因为levels保留了原始数据get_level_values列的所有类别

result.groupby(axis=1, level=0).get_group(0).columns.get_level_values(1)
Out[1296]: Index(['A', 'B', 'C', 'D', 'E'], dtype='object')

这是unused levels的问题。 当您拥有MultiIndex时,级别仍然存在,只是未使用,因此您可以根据需要将其删除:

result.groupby(axis=1, level=0).get_group(0).columns.remove_unused_levels().levels[1]
#Index(['A', 'B', 'C', 'D', 'E'], dtype='object')

要查看一切仍然存在,请查看各列。 第一级仍然有13个值,但是该组仅引用前5个值。

print(result.groupby(axis=1, level=0).get_group(0).columns)
#MultiIndex(levels=[[0, 1, 2], ['A', 'B', 'C', 'D', 'E', 'G', 'H', 'I', 'J', 'L', 'M', 'N', 'P']],
#           codes=[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM