gpt4 book ai didi

python - Pandas 在 MultiIndex DataFrame 中选择特定的低级列

转载 作者:行者123 更新时间:2023-12-05 05:06:05 24 4
gpt4 key购买 nike

不知道这个问题有没有被再次回答,但是我没有找到类似的东西

我有一个包含两级列的 MultiIndex DataFrame,例如:

arrays = [np.array(['bar', 'bar','bar', 'foo', 'foo','foo', 'qux', 'qux', 'qux']),
np.array(['one', 'two', 'three', 'one', 'two', 'three', 'one', 'two','three'])]

df = pd.DataFrame(np.random.randn(3, 9), columns=arrays)
print(df)

bar foo qux \
one two three one two three one
0 1.255724 -0.692387 -1.485324 2.265736 0.494645 1.973369 -0.326260
1 -0.903874 0.695460 -0.950076 0.181590 -2.345611 1.288061 0.980166
2 -0.294882 1.034745 1.423288 -0.895625 -0.847338 0.470444 0.373579


two three
0 0.136427 -0.136479
1 0.702732 -1.894376
2 0.506240 -0.456519

我想为每个第一级列独立地从第二级选择特定列。

例如,我想得到这样的结果:

        bar                 foo       qux          
one two two one three
0 1.255724 -0.692387 0.494645 -0.326260 -0.136479
1 -0.903874 0.695460 -2.345611 0.980166 -1.894376
2 -0.294882 1.034745 -0.847338 0.373579 -0.456519

我已经看到了这个 questions,但这不是我想要实现的。

现在我是这样做的:

level0 = ['bar','foo','qux']
level1 = [['one','two'],['two'],['one','three']]

df_list=[]
for i,value in enumerate(level0):
df_list.append(df.loc[:,(value,level1[i])])
new_df = pd.concat([i for i in df_list],axis=1)
print(new_df)

但在我看来这并不是最好的解决方案。

有没有更好的(更多“pandas”)方法来解决这个问题?

最佳答案

您可以先挑出列,然后使用列提取,而不是连接数据;

cols = pd.concat([pd.DataFrame({'level_0':x, 'level_1':y}) 
for x,y in zip(level0,level1)]
).values

df[cols]

输出:

        bar                 foo       qux          
one two two one three
0 0.729061 -0.876547 0.312557 0.736568 0.250469
1 0.619194 0.451023 0.803252 -1.636403 -0.854607
2 0.254690 -1.054859 -1.223274 0.398411 -1.448396

关于python - Pandas 在 MultiIndex DataFrame 中选择特定的低级列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com